変数を保持するには、ファイル名から文字列を削除しますか?

変数を保持するには、ファイル名から文字列を削除しますか?

次のファイルのリストがあります。

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 

newname2つのジョブの出力を組み合わせたものですgrep

  • grep -Po '^[^_]*_[^_]*_\K[^_]*_'<<<"$file"A5201_各ファイル名に対して同様の文字列を出力します。

  • $(grep -Po '.*_\K.*$' <<<"$file")ファイル名の最後の部分と一致します。_

  • $()bashコマンド代替モードです。

関連情報