私の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
オプションを使用すると、join
2番目のファイルに一致するものがなくても、最初のファイルのすべての行が出力されます(「左結合」を実行)。
入力データを並べjoin
替える必要があり、sort
コマンドラインで2つのプロセス置換を介して各ファイルを個別に呼び出して並べ替える必要があります。ファイルを事前に並べ替えることもできます。
-t $'\t'
データがタブで区切られている場合は、コマンドの先頭にパラメータを追加する必要がありますjoin
。これにより、出力に既存のタブ区切り文字が保持されます。
>output.txt
出力をファイルに保存するには、コマンドの最後に追加して出力をリダイレクトします。
答え2
並べ替えるには、次のものを使用できますawk
。
awk '
FNR==NR {s[$1]=$0}
FNR!=NR {if(s[$1]) print s[$1]; else print $0}
' list_interactors.txt list.txt
出力:
6tyr_A_002__________ 6tyr1_B QRT54R AAAAA
7yer_2_009__________
3erf_1_001__________ 3erf2_B QAEF6R XXXXX
2dr5_D_2-3__________
答え3
$ awk 'NR==FNR{a[$1]=$0; next} {print ($1 in a ? a[$1] : $0)}' list_interactors.txt list.txt
6tyr_A_002__________ 6tyr1_B QRT54R AAAAA
7yer_2_009__________
3erf_1_001__________ 3erf2_B QAEF6R XXXXX
2dr5_D_2-3__________
答え4
Perl onelinerはまた、次のことができます。
$ perl -ane ' { chomp;$s{$F[0]}=$_; } END { print "$s{$_}\n" for sort(keys(%s)) }' list.txt list_interactors.txt
2dr5_D_2-3__________
3erf_1_001__________ 3erf2_B QAEF6R XXXXX
6tyr_A_002__________ 6tyr1_B QRT54R AAAAA
7yer_2_009__________