我有一个目录data
,其中有几个fastqs
如下所示:
SRR13456784_1.fastq
SRR13456784_2.fastq
SRR13456784_3.fastq
SRR13456785_1.fastq
SRR13456785_2.fastq
SRR13456785_3.fastq
SRR13456786_1.fastq
SRR13456786_2.fastq
SRR13456786_3.fastq
SRR19876543_1.fastq
SRR19876543_2.fastq
SRR19876543_3.fastq
SRR19876544_1.fastq
SRR19876544_2.fastq
SRR19876544_3.fastq
我有一个details.txt
分隔文件,其中有两列ID and Sample
。我想连接匹配样本的 ID fastqs 并给出输出的样本名称。
ID Sample
SRR13456784 GJK1234567
SRR13456785 GJK1234567
SRR13456786 GJK1234567
SRR19876543 GJK2444103
SRR19876544 GJK2444103
对于我连接的文件之一,如下所示:
cat SRR13456784_1.fastq SRR13456785_1.fastq SRR13456786_1.fastq > GSK1234567_1.fastq
cat SRR13456784_2.fastq SRR13456785_2.fastq SRR13456786_2.fastq > GSK1234567_2.fastq
cat SRR13456784_3.fastq SRR13456785_3.fastq SRR13456786_3.fastq > GSK1234567_3.fastq
上面的txt文件是一个例子,但在我的原始文件中有300个ID匹配50个样本。
谁能告诉我如何进行此串联并在单个脚本中为输出提供示例名称?谢谢。
答案1
你可以这样做:
$ tail -n +2 details.txt |
while read -r id sample; do
for i in {1..3}; do
cat < "${id}_${i}".fastq >> "${sample}_${i}".fastq
done
done
需要tail +2
跳过标题 ( ID Sample
)。然后,我们迭代剩余的行,将 id 和样本保存在相应的变量中,然后进行第二个循环,迭代数字 1 到 3,并连接相关文件。从示例输入运行的命令是:
$ tail -n +2 details.txt | while read -r id sample; do for i in {1..3}; do echo "cat \"${id}_${i}\".fastq >> \"${sample}_${i}\".fastq"; done; done
cat "SRR13456784_1".fastq >> "GJK1234567_1".fastq
cat "SRR13456784_2".fastq >> "GJK1234567_2".fastq
cat "SRR13456784_3".fastq >> "GJK1234567_3".fastq
cat "SRR13456785_1".fastq >> "GJK1234567_1".fastq
cat "SRR13456785_2".fastq >> "GJK1234567_2".fastq
cat "SRR13456785_3".fastq >> "GJK1234567_3".fastq
cat "SRR13456786_1".fastq >> "GJK1234567_1".fastq
cat "SRR13456786_2".fastq >> "GJK1234567_2".fastq
cat "SRR13456786_3".fastq >> "GJK1234567_3".fastq
cat "SRR19876543_1".fastq >> "GJK2444103_1".fastq
cat "SRR19876543_2".fastq >> "GJK2444103_2".fastq
cat "SRR19876543_3".fastq >> "GJK2444103_3".fastq
cat "SRR19876544_1".fastq >> "GJK2444103_1".fastq
cat "SRR19876544_2".fastq >> "GJK2444103_2".fastq
cat "SRR19876544_3".fastq >> "GJK2444103_3".fastq