如何将文件的特定列的值粘贴到另一个命令中?

时间:2018-01-29 22:11:06

标签: awk paste fasta protein-database

我想使用fastacmd来提取fasta序列的特定区域。 为此,我需要输入fasta文件的名称-d,序列-s的名称以及提取-L的序列的位置。例如:

fastacmd -d OAP11402.1.fa -s OAP11402.1 -L 50,100

但问题是我有数百个文件(每个文件有一个序列与文件名相同),每个要提取的序列的位置信息都在蛋白质数据库中(info_sequences.txt)。所以,我想制作一个循环来粘贴文件名,序列和从info_sequences.txt中的蛋白质数据库fastacmd中提取的位置。

info_sequences.txt的外观是这样的:

    File          seq_id      position_start    position_end
    OAP11402.1.fa OAP11402.1              50             100 
    OAP15774.1.fa OAP15774.1              75             200 
    OAP10214.1.fa OAP10214.1              33             310

我认为awk可能有所帮助,但我正在努力将信息粘贴到fastcmd

2 个答案:

答案 0 :(得分:1)

source <(
    awk 'NR > 1 {
        printf "echo fastacmd -d %s -s %s -L %d,%d\n", $1, $2, $3, $4
    }' info_sequences.txt 
)

awk命令吐出所有命令 然后source <( ... )评估当前shell中的命令。

与Cyrus相同的建议,如果看起来没问题,请删除回声

或者,在awk中全部完成:

awk 'NR > 1 {
    cmd = "echo fastacmd -d " $1 " -s " $2 " -L " $3 "," $4
    system(cmd)
}' info_sequences.txt 

答案 1 :(得分:0)

awk 'NR>1 {print "-d",$1,"-s",$2,"-L",$3","$4}' info_sequences.txt | xargs -I {} echo fastacmd {}

输出:

fastacmd -d OAP11402.1.fa -s OAP11402.1 -L 50,100
fastacmd -d OAP15774.1.fa -s OAP15774.1 -L 75,200
fastacmd -d OAP10214.1.fa -s OAP10214.1 -L 33,310

如果一切正常,请删除echo