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

How to paste values of specific columns of a file into another command?

我想用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

中的方法
awk 'NR>1 {print "-d",,"-s",,"-L",","}' 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

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

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

中的命令

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


或者,全部在 awk 中完成:

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