다음과 같은 구조를 가진 약 2000개의 fasta 파일이 있습니다.
Name_ID#_Name2_ID1...2000.fasta
파일 이름 순서를 다음과 같이 변경하고 싶습니다.
Name2.Name_ID#_ID1...2000.fasta
누구든지 내가 이것을 달성할 수 있는 방법에 대한 제안이 있습니까?
답변1
이 문제를 해결하는 방법에는 여러 가지가 있습니다. 한 가지 방법은 다음과 같습니다.
#!/bin/bash
for i in *.fasta; do
tokens=( $(echo "${i}" | sed -e 's/_/ /g') )
newName="${tokens[2]}.${tokens[0]}_${tokens[1]}_${tokens[3]}'"
echo "mv ${i} ${newName}"
done
.fasta
이 스크립트는 현재 디렉터리에서 ;로 끝나는 모든 파일을 반복합니다. 루프를 통과할 때마다 변수에는 ${i}
현재 파일 이름이 포함됩니다.
다음으로 스크립트는 파일 이름의 sed
밑줄( )을 _
공백으로 변경하고 이를 토큰 배열로 저장합니다. 라는 파일의 경우 Name_ID1_Name2_ID1000.fasta
다음과 같이 끝납니다.
tokens[0]='Name'
tokens[1]='ID1'
tokens[2]='Name2'
tokens[3]='ID1000.fasta'
newName
다음으로, 이러한 태그와 원하는 주문에 대한 설명을 기반으로 스크립트가 생성됩니다. 마지막으로 스크립트는 mv
이름 바꾸기를 수행하는 데 사용되는 명령을 인쇄합니다.
스크립트를 실행하면 수행할 작업이 인쇄됩니다. 원하는 대로 작동하는지 확인할 수 있습니다. 그렇다면 다음을 제거할 수 있습니다 echo
.
mv "${i}" "${newName}"
다시 실행해 보세요. 이렇게 하면 실제로 이름 바꾸기가 수행됩니다.