2つのリストの間をgrep

2つのリストの間をgrep

私のLinuxコンピュータには2つのファイルがあります。最初の「list.txt」にはオブジェクトリスト(2649個のオブジェクト)が含まれ、2番目の「list_interactors.txt」には前のリスト(719個のオブジェクト)の一部のオブジェクトを含む短いリストが含まれています。オブジェクトにはいくつかの関連変数がリストされています。他のオブジェクトでは。 「list_interactors」ファイル内のすべてのオブジェクト(2649)のリストと、特定のオブジェクトの関連変数を取得したいと思います。

例:

文書list.txt

6tyr_A_002__________
7yer_2_009__________
3erf_1_001__________
2dr5_D_2-3__________

文書list_interactors.txt

6tyr_A_002__________    6tyr1_B    QRT54R   AAAAA
3erf_1_001__________    3erf2_B    QAEF6R   XXXXX

output.txt

6tyr_A_002__________    6tyr1_B    QRT54R   AAAAA
7yer_2_009__________
3erf_1_001__________    3erf2_B    QAEF6R   XXXXX
2dr5_D_2-3__________

私はプログラミング言語にはあまり実用的ではありません。このスクリプトでgrep関数を使用しようとしています。

grep -f list.txt list_interactors.txt

ただし、出力は "list_interactors.txt"ファイルに似たファイルです。

私を助けてくれますか?

ベストアンサー1

$ join -a 1  <( sort list.txt ) <( sort list_interactors.txt )
2dr5_D_2-3__________
3erf_1_001__________ 3erf2_B QAEF6R XXXXX
6tyr_A_002__________ 6tyr1_B QRT54R AAAAA
7yer_2_009__________

joinこれは、2つのファイル間のリレーショナルJOIN操作を実行するために使用されます。デフォルトでは、最初のフィールドが結合キーとして使用されます。

この-a 1オプションを使用すると、join2番目のファイルに一致するものがなくても、最初のファイルのすべての行が出力されます(「左結合」を実行)。

入力データを並べjoin替える必要があり、sortコマンドラインで2つのプロセス置換を介して各ファイルを個別に呼び出して並べ替える必要があります。ファイルを事前に並べ替えることもできます。

-t $'\t'データがタブで区切られている場合は、コマンドの先頭にパラメータを追加する必要がありますjoin。これにより、出力に既存のタブ区切り文字が保持されます。

>output.txt出力をファイルに保存するには、コマンドの最後に追加して出力をリダイレクトします。

おすすめ記事