1

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

4

2 回答 2

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 
于 2018-01-29T22:55:24.380 回答
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.

于 2018-01-29T22:17:25.023 回答