抱歉,如果这个问题之前已被问过。我对这一切都很陌生。
我想连接不同文件夹中包含R1
文件名特定位置的所有文件。到目前为止我的尝试不起作用,因为某些文件名有不同的S号。
文件夹1
952_56890_S91_combined_L001_R1_001.fastq.gz 952_56890_S91_combined_L001_R2_001.fastq.gz 952_53929_S92_combined_L001_R1_001.fastq.gz 952_53929_S92_combined_L001_R2_001.fastq.gz
文件夹2
952_56890_S125_combined_L001_R1_001.fastq.gz 952_56890_S125_combined_L001_R2_001.fastq.gz 952_53929_S126_combined_L001_R1_001.fastq.gz 952_53929_S126_combined_L001_R2_001.fastq.gz
答案1
$ cat 952_53929_S*R1._001.fastq.gz >> 文件名
答案2
如果您只有几个示例名称,您可以手动执行此操作:
cat folder*/952_53929_S*_R1_*.fastq.gz > 952_53929_combined_L001_R1_001.fastq.gz
cat folder*/952_53929_S*_R2_*.fastq.gz > 952_53929_combined_L001_R2_001.fastq.gz
cat folder*/952_56890_S*_R1_*.fastq.gz > 952_56890_combined_L001_R1_001.fastq.gz
cat folder*/952_56890_S*_R2_*.fastq.gz > 952_56890_combined_L001_R2_001.fastq.gz
如果你有更多,那就不太实用了。因此,您可以自己收集名称:
$ for f in */952_*.fastq.gz; do fname=$(basename "$f"); echo ${fname%%_S*} ; done | sort | uniq
952_53929
952_56890
这将为您提供前缀,因此您可以执行以下操作:
for f in */952_*.fastq.gz; do
fname=$(basename "$f");
echo ${fname%%_S*} ;
done |
sort |
uniq |
while read prefix; do
cat */"$prefix"*_R1_*.fastq.gz > "$prefix"_combined_L001_R1_001.fastq.gz;
cat */"$prefix"*_R2_*.fastq.gz > "$prefix"_combined_L001_R2_001.fastq.gz;
done