別のファイルを使用して、grep と次の行に一致する行の一部を抽出し、新しいファイルに保存します。

別のファイルを使用して、grep と次の行に一致する行の一部を抽出し、新しいファイルに保存します。

1行にはDNA配列識別子があり、その直下の次の行にはDNA配列を含むファイルがあります。 DNA配列は長いが整列している。

ファイル1.fasta:

>AB244308.1.1447 233_28379 1..292

------------------------------------- ------------- ------------------------ -------------------------- ----------- GTGCAG -CCGC-CGC-GGTAATAC-GG-AGGAT-GCG-A-GCG-TTATC-CGG-ATTCATT-GG-GT-TTA--AAGGGTGCGCAGG-CGG-GCGT-AT- ---------- - -------AA------GTCA--------- -- - ------------ ----GGG--G--TG--A-AA-TG--CC- AC- GG ------------------------- ------------------------ - ------------------------- ------------------------ - ------------------------- ------------------------ ---------CT- C-AA------------ ------------- -------------- ---------- ------------- --- ---------------------------------- ----- -------- --- ---CCGTGGA--AC----TG--CC---T-- T---- ---------- T--GA-TA---C- ----------- ---- ---------- ---------- --T--GT--AT--GTC--- -- ---------- ---------- ----- ---------- --------- ---- -- ---------- --TTGAGT--T-- ---T-AG------TT-GA---- ------AGTG---GG- C - - - - - - - - - - - - - - - - - - - - - - - - - - - - ---------------------- ------- -------- - --------------- ------GG--A--ATG------ --- -- -------------- ------------- -- --------- ----- -- ------TAGC-AT--GT-AG-CG- GT--G--- ------- ----A--AA----------- ---- ------- ----------------- ------------ ------- --- ----TG-C-AT-AG--AG-A-TG---------- ------------ ----- --CT-- ----AC------AGA-AC- A-CC--------- -------- ---- ----------- --- ---GA--T--A--GC-GAA-G--GC----A----- -G--CTCA- --CTA-------- -A- -GT-TA------------------- -------- ------ ---------- ----------- ------ ------- -------------- ------ -----AG ---------ACT--GA--CG-----C--- -------------- ------ ----- -----TC--A-TG- -CA-CG-A--AA-GC---- G-TG--GG -G-AT-CA-AA-CA--GG-AT-- ------TA-G-ATA- -------CC-CCC-GTA--GT -CC---- ---------------- - ----------------------------------------------------------- -------- ------ ------- -------------- ------ ---- ----- ------------ ------ -------------- ------------------ -- ------ ----------- ----------------------- ------ --

このファイルには、この形式に従う約112,000のシーケンスがあります。約20個のシーケンス識別子があり、これをfastaファイルから抽出して別のファイルに保存したいと思います。

シーケンス識別子は以下のようにtxtファイルにあります。

ファイル2.txt:

AB244308.1.1447
New.ReferenceOTU151 
New.CleanUp.ReferenceOTU19 
New.ReferenceOTU59
New.CleanUp.ReferenceOTU6

シーケンス識別子を持つ行を抽出するだけでなく、DNAシーケンスを含む次の行を抽出してすべての新しいテキストファイルに印刷したいと思います。

この答えで知りました(別のファイルリストの文字列を含むテキストファイルから行を抽出するには?)grepとsedを使用する必要があります。別の答えも見つかりました(https://stackoverflow.com/questions/7103531/how-to-get-the-part-of-file-after-the-line-that-matches-grep-expression-first)はgrepに一致する行を取得することに関連しています。

残念ながら、これらの答えを組み合わせて何をしたいのかわかりません。

答え1

彼らが言ったように、猫の皮をむく方法はいくつかあります。

grep -F -f File2.txt -A 1 File1.fasta > File3.log

< File2.txt sed -e 's|[.]|\\&|g; s|.*|g/^>&/.,.+1W File3.log|' | ed -s - File1.fasta

edここでは、動的に生成されたバッチスクリプトにシーケンス識別子を適用します。次にedそれを渡してfastaファイルを処理し、結果を保存するために使用します。File3.log

答え2

シーケンスが常に1行にある場合、これはマイナーです(標準のfasta形式ではありません。btw、fastaは通常1行に60文字です)。一致する行と次の行を印刷するには、grepwithを使用して検索するパターンのリストを指定します。-A 1-f

grep -A1 -f File2.txt File1.fasta 

ただし、1つのシーケンスを呼び出し、>foobar別のシーケンスに名前を付け、>fooこのfoo場合は両方とも印刷されます。より複雑なソリューションについては、私の答えをご覧ください。ここ。 retrievesqs.plスクリプトをご希望の場合はお知らせください。そのリンクでは使用できなくなります。この回答を更新する必要があります。

答え3

20個の識別子のそれぞれにtxtファイルがありますか?次に、それらが順序1.txtなどと呼ばれると仮定します。 (適応してください)

for file in sequence*.txt; do
  id=`grep AB $file`
  grep $id -A1 $file1.fasta |grep -v $id
done

2行目は常にIDが含まれていると想定していますAB。それ以外の場合は、常に最初の行にすることもできます。その後、それを使用しますhead -1 $file

3行目はid行と後続行を抽出します。 2番目のgrepはid行を削除します。どのシーケンスがどのIDに対応しているのかを知るために、ID行をシーケンスと共に出力したい場合は、それを削除できます。

追加grepオプションを使用すると、-m1ファイルに一致するものが1つしかないことがわかり、検索速度をわずかに向上させることができます。

関連情報