file1 と file2 から一致する行を印刷します。

file1 と file2 から一致する行を印刷します。

file1.txtとfile2.txtがあります。一致する行を新しいファイルとして印刷したいです。

ファイル1.txt

FOMPING00002015
FOMPING00008750 
FOMPING00003379 
FOMPING00009073
FOMPING00007164 
FOMPING00009598

ファイル2.txt

>FOMPING00013293 Protein of unknown function
ATGCCCTGCTCGTCGCTCGAGCGGGATCATAGCCAGCATGAAGTTATACCGTCATCGCAG
AGCCAGGAACGCGACTTTGTGCCGCCTAATGGTGACATCAGGAGTCGGGCGAGAACGACA
TCCGACGAAATTGTACCCACATCGCAG
>FOMPING00003379 Protein of unknown function
ATGCCCTGCTCGTCGCTCGAGCGGGATCATAGCCAGCATGAAGTTATACCGTCATCGCAG
AGCCAGGAACGCGACTTTGTGCCGCCTAATGGTGACATCAGGAGTCGGGCGAGAACGACA
TCCGACGAAATTGTACCCACATCGCAGTA
>FOMPING00009073 Protein of unknown function 
ATGTCCTCTTGGTCTGGTTCTTCTTACCCTCCACCTCCACGCGCACGTTCGCGCTCTCGC
TCCCCTTATCGTGGGTCTTATCCTGCGAGACCCGGGTATCCAGAGCCTGGATACTCGCAG
>FOMPING00000581 Similar to mcs4: Response regulator mcs4  
ATGTCCTCTTGGTCTGGTTCTTCTTACCCTCCACCTCCACGCGCACGTTCGCGCTCTCGC
TCCCCTTATCGTGGGTCTTATCCTGCGAGACCCGGGTATCCAGAGCCTGGATACTCGCAG
GATCCATACCGTGCCGACTGGGAGGCTTATGACAGAGAGCGCGCATGGGCCTCCTACGAG

複数のコマンドを試しました

grep -F file1.txt file2.txt > output.txt
grep -Ff file1.txt file2.txt > output.txt

これら2つのコマンドは、file2.txtの最初の行のみを出力します。

出力.txt

>FOMPING00013293 Protein of unknown function
>FOMPING00000581 Similar to mcs4: Response regulator mcs4.

出力ファイルがシーケンスを含むfile2.txtと同じであることを望みます。

ありがとう

ベストアンサー1

これは私のテストでうまくいくようです。秘密は、レコード/ブロック区切り文字として ">"を使用することです。

awk 'NR==FNR{a[$0];next};$1 in a{print ">" $0}' file1.txt RS=">" file2.txt
#or alternativelly, due to the whitespace present in the end of each line of file1.txt
awk 'NR==FNR{a[$1];next};$1 in a{print ">" $0}' file1.txt RS=">" file2.txt

RSawkの末尾の位置は後続のファイルに影響しますRS。私のコマンドは解析にデフォルト値をfile1使用RS="\n"しますが。file2RS=">"

おすすめ記事