수천 개의 유사한 파일이 있고 그 파일의 패턴 뒤에 각각의 이름을 쓰고 싶습니다. 예를 들어:
**파일 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
먼저 플래그 없이 실행하십시오.