在下划线之前合并具有ID的文件

时间:2018-04-24 16:31:55

标签: bash cat

我正在寻找一种方法来合并文件名中第一个非核心之前具有相同ID的文件。输出应仅包含ID,后跟fastq.gz。输出必须是gzip压缩。

0394_L007_R1.fastq.gz 
0394_L008_R1.fastq.gz 
0444_L005_R1.fastq.gz 
0444_L006_R1.fastq.gz 

0394.fastq.gz
0444.fastq.gz

比以下更方便:

cat 0394_L007_R1.fastq.gz  0394_L008_R1.fastq.gz   > 0394.fastq.gz

3 个答案:

答案 0 :(得分:2)

首先,在关联数组中收集唯一标识符:

declare -A ids
for f in *.fastq.gz; do
  ids[${f%%_*}]=1
done

然后使用gzcat来管道每个的(未压缩的)内容 将文件匹配到gzip以将输出重新压缩为单个文件。

for id in "${!ids[@]}"; do
  gzcat "$id"_*.fastq.gz | gzip -c > "$id".fastq.gz
done

(或者,因为我忘记了连接的Gzip文件本身就是有效的Gzip文件,

for id in "${!ids[@]}"; do
  cat "$id"_*.fastq.gz > "$id".fastq.gz
done

答案 1 :(得分:2)

一个简单的循环,不断追加目标文件。所以,这只是为当前文件找到正确的“目标文件”并附加到它上面。

#! /bin/bash
for x in *.fastq.gz; do
     currid=$(echo "$x" | cut -d'_' -f1)
     cat "$x" >> "$currid".fastq.gz
done

答案 2 :(得分:1)

使用简单的命令:

ls | tr'_''。' |切-d'。' -f1,4,5 | uniq的