2つのファイルを比較して同じリストを取得する

2つのファイルを比較して同じリストを取得する

file1.txt(50行)

TERYUFV00000010753
TERYUFV00000009526 

file2.txt(500行)

TERYUFV00000009526 refids_739_known_8/10_target
TERYUFV00000018907 refids_12023_known_21/22_target
TERYUFV00000010753 refids_11775_known_1/1_target

出力.txt

TERYUFV00000010753 refids_11775_known_1/1_target
TERYUFV00000009526 refids_739_known_8/10_target

file1.txt(50行)とfile2.txt(500行)を比較し、file2.txtからfile1.txtと同じリストを取得します。

Joinコマンドとfgrepコマンドを試しましたが、空のファイルが出力されます。

答え1

結合を使用すると、各行のエントリはデータベースの「セル」に似ていますが、ソートする必要があるため、試してみることができます。

sort file1.txt > file1_t.txt
sort file2.txt > file2_t.txt

その後、接続

$ join file1_t.txt file2_t.txt

これにより、両方のファイル内のすべてのセル項目のリストである外部結合が提供されます。このリストを 2 つのファイルエントリに減らすには、上記のコマンドの出力を uniq にパイプします。

$ join file1_t.txt file2_t.txt | uniq

答え2

fgrep -f file1.txt file2.txt

ここでは、file1.txtから検索パターンを取得し、file2.txtで検索します。テキストが固定されているため、fgrepより高速な検索操作に使用します。

ここに画像の説明を入力してください。

答え3

sortあなたはあなたの前にいるべきですjoin

$ cat a.in
TERYUFV00000010753
TERYUFV00000009526
$ cat b.in
TERYUFV00000009526 refids_739_known_8/10_target
TERYUFV00000018907 refids_12023_known_21/22_target
TERYUFV00000010753 refids_11775_known_1/1_target
$ join a.in b.in
$ join <(sort a.in) <(sort b.in)
TERYUFV00000009526 refids_739_known_8/10_target
TERYUFV00000010753 refids_11775_known_1/1_target

答え4

次の行は有効ですか?

grep -iw -f file1.txt file2.txt

ファイルがWindowsクライアントからサーバーにアップロードされる場合は、まずdos2unixを実行する必要があります。

dos2unix file1.txt file2.txt

上記のコマンドが機能しない場合は、次の行を試して、file1.txt行の先頭または末尾に追加の印刷されない文字があるかどうかを確認できます。 file1.txtエントリに印刷されない不要な文字があると、file2.txtのgrepが失敗する可能性があります。

cat -v file1.txt
sed -n -l file1.txt

関連情報