次のファイルのリストがあります。
Dorn_Triatomine_A5201_sequence_1_unmappedforTdim_tdim.alleles.tsv Dorn_Triatomine_A5201_sequence_1_unmappedforTdim_tdim.matches.tsv Dorn_Triatomine_A5201_sequence_1_unmappedforTdim_tdim.snps.tsv Dorn_Triatomine_A5201_sequence_1_unmappedforTdim_tdim.tags.tsv Dorn_Triatomine_T9252_sequence_1_unmappedforTdim_tdim.alleles.tsv Dorn_Triatomine_T9252_sequence_1_unmappedforTdim_tdim.matches.tsv Dorn_Triatomine_T9252_sequence_1_unmappedforTdim_tdim.snps.tsv Dorn_Triatomine_T9252_sequence_1_unmappedforTdim_tdim.tags.tsv
重複した文字列を削除し、ファイル名を次のように変更したいと思います。
A5201_tdim.allele.tsv A5201_tdim.matches.tsv A5201_tdim.snps.tsv
私は以下を使用しようとしています:
mv Dorn_Triatomine_*_sequence_1_unmappedforTdim_tdim.tags.tsv *_tdim.tags.tsv
これを行う最も簡単な方法は何ですか?
答え1
このスクリプトは次のことを行う必要があります。
#!/bin/sh
for f in Dorn_Triatom* ; do
mv "$f" `echo "$f" | sed -e 's/Dorn_Triatomine_//' -e 's/sequence_1_unmappedforTdim_//'`
done
答え2
grep
新しいファイル名を取得するには、PCREと一緒に使用してください。
#!/bin/bash
for file in *.tsv; do
newname="$(grep -Po '^[^_]*_[^_]*_\K[^_]*_'<<<"$file")$(grep -Po '.*_\K.*$' <<<"$file")"
mv "$file" "$newname"
done
newname
2つのジョブの出力を組み合わせたものですgrep
。
grep -Po '^[^_]*_[^_]*_\K[^_]*_'<<<"$file"
A5201_
各ファイル名に対して同様の文字列を出力します。$(grep -Po '.*_\K.*$' <<<"$file")
ファイル名の最後の部分と一致します。_
$()
bash
コマンド代替モードです。