尝试创建一个循环访问列表的循环,并将该列表中的某些字段用作我的bowtie2命令的一部分

问题描述

首先,这是我的第一个问题,我刚刚报名参加,我是unix的新手,所以如果做错了事,请原谅。

好吧,我有一个名为fqfiles的文件

216     Slender 216_L8_1.fq.gz  216_L8_2.fq.gz
222     Stumpy  222_L8_1.fq.gz  222_L8_2.fq.gz
218     Slender 218_L8_1.fq.gz  218_L8_2.fq.gz
220     Stumpy  220_L8_1.fq.gz  220_L8_2.fq.gz
221     Stumpy  221_L8_1.fq.gz  221_L8_2.fq.gz
219     Slender 219_L8_1.fq.gz  219_L8_2.fq.gz

我需要为每个命令运行bowtie2命令,其语法为;

bowtie2 -x Trypanosoma_brucei_brucei -1 216_L8_1.fq.gz -2 216_L8_2.fq.gz -S 216Slender.sam

所以我想做的是;对于该文件的每一行,请使用第一个字段和第二个字段构成上面代码的最后一部分,并使用文件的第3个和第4个字段作为代码的中间部分。

awk '{print $1$2".sam"}' fqfiles
awk '{print -1,$3,-2,$4}' fqfiles

我可以得到这些部分,但是我很难使它成为一个循环,该循环将采用第一行,采用第一行的字段,将其放入代码中,运行它,然后重新开始用于下一行等。

有人可以帮我写这个循环,还是建议我应该怎么做?

解决方法

使用read逐行读取文件:

while read -r n s f1 f2 ; do
    bowtie2 -x Trypanosoma_brucei_brucei -1 "$f1" -2 "$f2" -S "$n$s"
done < file