これらのファイルはディレクトリ内にあります。
Mabel-A10_GTAGAGGA_L001_R1_001.fastq.gz
Mabel-A5_GGACTCCT_L001_R1_001.fastq.gz
Mabel-A11_GCTCATGA_L001_R1_001.fastq.gz
Mabel-A6_TAGGCATG_L001_R1_001.fastq.gz
出力は次のようになるようにします。
Mabel-A10_L001_R1_001.fastq.gz
Mabel-A5_L001_R1_001.fastq.gz
Mabel-A11_L001_R1_001.fastq.gz
Mabel-A6_L001_R1_001.fastq.gz
答え1
名前を変更するには、次のような方法を試すことができます。
for i in *
do
o=$(echo $i|awk -F_ '{print $1,$3,$4,$5}')
mv "$i" "$o"
done
答え2
このスクリプトは、タスクを実行するために一連の 'mv' コマンドを実行するシェル コマンドを出力します。
for FILE in *.fastq.gz
do
L="${FILE%%_*}_"
R="${FILE#${L}*_}";
printf 'mv -vi "%s" "%s"\n' "$FILE" "$L$R"
done
これを一度実行して、出力を調べます。ファイルが多数ある場合は、 を使用しless
てコマンドを確認することをお勧めします。
すべてが問題なければ、コマンドを再度実行し、出力を にパイプしますbash
。
これは、変数 L をファイル名の最初のアンダースコアの左側すべてとアンダースコア自体に設定することで機能します。次に、ファイル名の先頭から L の文字列を削除し、さらに次のアンダースコアまで削除して、文字列 R を形成します。
mv -vi "Mabel-A10_GTAGAGGA_L001_R1_001.fastq.gz" "Mabel-A10_L001_R1_001.fastq.gz"
mv -vi "Mabel-A11_GCTCATGA_L001_R1_001.fastq.gz" "Mabel-A11_L001_R1_001.fastq.gz"
mv -vi "Mabel-A5_GGACTCCT_L001_R1_001.fastq.gz" "Mabel-A5_L001_R1_001.fastq.gz"
mv -vi "Mabel-A6_TAGGCATG_L001_R1_001.fastq.gz" "Mabel-A6_L001_R1_001.fastq.gz"