我将这些文件放在一个目录中。
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
该脚本将输出 shell 命令,这些命令执行一系列“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"