awk コマンドは、別ファイルの値で部分文字列を出力します。

awk コマンドは、別ファイルの値で部分文字列を出力します。

(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を介してこれら2つのファイルを渡す方法を見つけるのは本当に難しいです!ありがとう

ベストアンサー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

おすすめ記事