根据文件名中的ID分配多个文件

时间:2019-04-12 10:54:01

标签: bash cat

我想先使用cat将具有下一个下划线的相似ID的文件合并为一个文件。如何为多个文件执行以下操作?
想到了这样的东西:

for f in *.R1.fastq.gz; do cat "$f" > "${f%}.fastq.gz"; done

9989_L004_R1.fastq.gz
9989_L005_R1.fastq.gz
9989_L009_R1.fastq.gz
9873_L008_R1.fastq.gz
9873_L005_R1.fastq.gz
9873_L001_R1.fastq.gz

9989.fastq.gz
9873.fastq.gz

2 个答案:

答案 0 :(得分:2)

for f in *_R1.fastq.gz; do cat "$f" >> "${f%%_*}.fastq.gz"; done
  • >>用于添加,
  • ${f%%_*}删除匹配$f的{​​{1}}中最长的后缀。

答案 1 :(得分:1)

这是另一种方式:

for f in *_R1.fast1.gz; do 
   [[ -f "${f%%_*}.fastq.gz" ]] || cat ${f%%_*}_*_R1.fast1.gz > "${f%%_*}.fastq.gz"
done

或者如果您想使其更具可读性:

for f in *_R1.fast1.gz; do 
   key="${f%%_*}"
   [[ -f "${key}.fastq.gz" ]] || cat ${key}_*_R1.fast1.gz > "${key}.fastq.gz"
done