파일 내 패턴 앞에 파일 이름을 씁니다.

파일 내 패턴 앞에 파일 이름을 씁니다.

수천 개의 유사한 파일이 있고 그 파일의 패턴 뒤에 각각의 이름을 쓰고 싶습니다. 예를 들어:

**파일 1의 이름은 nexus0000입니다.

파일에는 다음이 포함됩니다.

>Pseudomonas_1M
ATGATCCGCTTCGAGCAGGTCGGCAAACGCTATC
>Pseudomonas_2M
GTGAGCTTCGAGCAGGTCGGCGAGCCGCTATC

나는 이것을 얻고 싶다:

nexus0000>Pseudomonas_1M
ATGATCCGCTTCGAGCAGGTCGGCAAACGCTATC
nexus0000>Pseudomonas_2M
GTGAGCTTCGAGCAGGTCGGCGAGCCGCTATC

**파일 2의 이름은 nexus0001입니다.

파일에는 다음이 포함됩니다.

>Pseudomonas_1M
ATGATCCGCTTCGAGCAGGTCGGCAAACGCTATC
>Pseudomonas_2M
GTGAGCTTCGAGCAGGTCGGCGAGCCGCTATC

나는 이것을 얻고 싶다:

nexus0001>Pseudomonas_1M
ATGATCCGCTTCGAGCAGGTCGGCAAACGCTATC
nexus0001>Pseudomonas_2M
GTGAGCTTCGAGCAGGTCGGCGAGCCGCTATC

등.

지금까지는 다음을 사용하여 첫 번째 줄에만 파일 이름을 쓸 수 있습니다.

for file in nexus*; do echo "$file"$"$(cat -- "$file")" > "$file"; done

도와주셔서 감사합니다!

답변1

sed해결책:

for f in nexus*; do sed -i "s/^>/$f&/" "$f"; done

또는 사용멍하니inplace확장 기능(v.4.1.0부터 사용 가능):

for f in nexus*; do awk -i inplace '/^>/{ $0=FILENAME$0 }1' "$f"; done

답변2

find . ! -name . -prune -type f -name nexus\* -exec perl -i'' -pe 's/^>/$ARGV>/' {} +

현재 디렉터리에 대해서만 시작 하고 이름이 로 시작하는 일반 파일을 찾은 다음 find줄 시작 부분에서 발견된 콘텐츠를 파일 이름 + 자체로 바꿔 nexus이러한 여러 파일에 대해 내부 편집을 수행합니다 .>

답변3

이는 다음과 같이 Perl 한 줄짜리 코드를 사용하여 쉽게 수행할 수 있습니다.

perl -i -pe 's/>/$ARGV$_/g' nexus*

파일을 내부에서 변경 하므로 -i명령을 테스트하려면 -i먼저 플래그 없이 실행하십시오.

관련 정보