如何忽略文件名的一部分

如何忽略文件名的一部分

抱歉,如果这个问题之前已被问过。我对这一切都很陌生。

我想连接不同文件夹中包含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

相关内容