![awk 命令打印带有来自单独文件的值的子字符串](https://linux22.com/image/186054/awk%20%E5%91%BD%E4%BB%A4%E6%89%93%E5%8D%B0%E5%B8%A6%E6%9C%89%E6%9D%A5%E8%87%AA%E5%8D%95%E7%8B%AC%E6%96%87%E4%BB%B6%E7%9A%84%E5%80%BC%E7%9A%84%E5%AD%90%E5%AD%97%E7%AC%A6%E4%B8%B2.png)
我有许多看起来像(PF.table)的文件:
Pyrococcus_furiosus_COM1_XCP003685_1 5 15
Pyrococcus_furiosus_COM1_XCP003685_2 20 24
Pyrococcus_furiosus_COM1_XCP003685_3 40 58
和关联的序列文件(PF.seq):
ctgaggcgacatacgtttgagatacctggcaggtgatatgcaatgaggaaaaaacttgttggaatattgacaatattggttgctttgggcatgttagtaagccc....
我一直在努力编写一个命令来输出一个文件,该文件隔离从第一个文件中的值指示的字符位置开始的长度为 5 的子字符串。完美的输出将是:
>Pyrococcus_furiosus_COM1_XCP003685_1_up
cgaca
>Pyrococcus_furiosus_COM1_XCP003685_1_down
gtttg
>Pyrococcus_furiosus_COM1_XCP003685_2_up
agata
...
表中的数字对应于序列中特定特征的位置,我想提取该特征上游和下游的 5 个字符。我真的很难弄清楚如何通过 awk 传递这两个文件!谢谢
答案1
awk '
NR==FNR{ seq=$0; next }
{
print ">" $1 "_up"
print substr(seq, $2, 5)
print ">" $1 "_down"
print substr(seq, $3, 5)
}
' PF.seq PF.table
输出:
>Pyrococcus_furiosus_COM1_XCP003685_1_up
ggcga
>Pyrococcus_furiosus_COM1_XCP003685_1_down
gtttg
>Pyrococcus_furiosus_COM1_XCP003685_2_up
agata
>Pyrococcus_furiosus_COM1_XCP003685_2_down
acctg
>Pyrococcus_furiosus_COM1_XCP003685_3_up
gcaat
>Pyrococcus_furiosus_COM1_XCP003685_3_down
gttgg