我想在FIRST下划线“ _”之前合并具有相似ID的文件。下面是两个这样的文件的示例。我认为cat
是可以使用的工具。
在:
EIV105_S21_R1.fastq.gz
EIV105_2_S117_R1.fastq.gz
EIV10_S13_R1.fastq.gz
EIV10_2_S109_R1.fastq.gz
退出:
EIV105_R1.fastq.gz
EIV10_R1.fastq.gz
答案 0 :(得分:1)
#!/bin/sh
suffix=R1.fastq.gz
find *_?*_$suffix | sed 's/_.*//' | sort -u |\
while read id; do
cat "$id"_?*_$suffix > "$id"_$suffix
# gzip -cd "$id"_?*_$suffix | gzip > "$id"_$suffix
done
find
列出输入文件名sed
提取ID sort
仅输出唯一的ID while
遍历唯一的id(假设它们不包含反斜杠或换行符之类的不寻常字符)cat
创建输出gzip
可能比cat压缩效果更好答案 1 :(得分:0)
这里使用进程替换来馈送while
循环(创建组合的gzip文件)的jhnc答案略有不同,例如
#!/bin/bash
suffix=R.fastq.gz
while read -r prefix; do
cat "${prefix}_"* > "$prefix.$suffix"
done < <(for i in *.gz; do echo ${i%%_*}; done | sort -u)
它使用for
循环来隔离和收集当前目录中每个现有gzip文件的唯一前缀,然后将该唯一列表重定向为while
循环的输入。
(注: 进程替代,例如<(process)
是bem中可用的 bashism ,但在POSIX shell中不可用。重定向进程替换以进行while循环,重定向和进程替换之间必须有一个空格,例如< <(process)
)