我正在寻找一种方法来合并文件名中第一个非核心之前具有相同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
答案 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的