2017-01-13 5 views
1

解決するには問題がありますが、自分ではできません。別のファイルから1つのパターンを取得している間に2つのパターン間の行を印刷する

ファイル1は、IDのを含有し、以下のようになります。私はIDと次の行を含む見出しを抽出したいファイル1からIDの付

>AIM49244.1 polyprotein [Aedes flavivirus] 
(several lines of text only Alphabetic) 
>NZ_03930.3 polyprotein [please help] 
(several lines of text only Alphabetic) 
>NP_722551.1 polyprotein [Alkhumra hemorrhagic fever virus] 
(several lines of text only Alphabetic) 
>NP_123456.7 polyprotein [Foo bar Foo bar] 
several lines of text 
and so on 

:のようにファイル2が見え

>AIM49244.1 
>NP_722551.1 
>YP_002790883.1 
>AGS41451.1 
>AIM49245.1 
>BAM74427.1 
>CCC55433.1 

次のIDが始まるまで、ファイル2のテキストを削除します。私は解決策を持っているが、ファイル2(>で始まる)説明ラインが一つだけ行が続いている場合にのみ動作し

>AIM49244.1 polyprotein [Aedes flavivirus] 
(several lines of text only Alphabetic) 
>NP_722551.1 polyprotein [Alkhumra hemorrhagic fever virus] 
(several lines of text only Alphabetic) 

例は、出力ファイルの結果。

awk 'FNR==NR{A[$1]=$1; next}$1 in A{print $0, getline; print $0}' File_1 File_2 

しかし、私は新しい問題にそれを熟達できません。私はそれが範囲パターンで動作するようにしようとしましたが、正しく動作しません。だからあなたが私を助けることができればとてもいいです:)

+1

これは、FASTAファイルのように見えます。 – Cyrus

答えて

2

非常に具体的な必要性がなく、すべての意味と注意点を十分に理解していない限り、getlineを使用しないでください。 http://awk.freeshell.org/AllAboutGetlineを参照してください。この場合

に必要なものは次のとおりです。

awk ' 
NR==FNR { ids[$1]; next } 
/^>/ { inTargetBlock = ($1 in ids ? 1 : 0) } 
inTargetBlock 
' file1 file2 
+0

'inTargetBlock = $ 1 in ids'だけはできません –

+0

IMHOはそれほど明確ではなく、文字のカップルを保存する価値はありません。 –

+1

ありがとうございます。それは完全に動作します。私はそれがたくさんできることを知っているgetlineについては、それは私のためにそのように働いた。しかし、私が時間を見つけたら、私はそのすべての機能を見ていきます。 – JFS31

関連する問題