次の構造を持つ約2000のfastaファイルがあります。
Name_ID#_Name2_ID1...2000.fasta
ファイル名の順序を次のように変更したいと思います。
Name2.Name_ID#_ID1...2000.fasta
誰でも私がこれを達成する方法についての提案はありますか?
答え1
この問題を解決する方法はいくつかあります。 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}"
もう一度実行してみてください。これにより、実際に名前変更が行われます。