web-dev-qa-db-ja.com

一致する行について2つのファイルを比較し、肯定的な結果を保存します

2つのファイルがあります。

ファイル1:

A0001  C001
B0003  C896
A0024  C234
.
B1542  C231
.
upto 28412 such lines

ファイル2:

A0001
A0024
B1542
.
.
and 12000 such lines.

ファイル2とファイル1を比較し、ファイル1の一致する行を保存したいのですが、PerlとBashを試しましたが、どれも動作していないようです。

私が試した最新のものは次のようなものでした:

for (@q) # after storing contents of second file in an array
{
        $line =`cat File1 | grep $_`; #directly calling File 1 from bash
        print $line;
}

しかし失敗します。

10
user3543389

awkを使用できます:

$ awk 'FNR==NR{a[$1];next}($1 in a){print}' file2 file1
A0001   C001
A0024   C234
B1542   C231
7
cuonglm

これは仕事をするはずです:

grep -Ff File2 File1

-f File2File2からパターンを読み取り、-Fはパターンを固定文字列として扱います(つまり、正規表現は使用されません)。

16
Graeme

両方のファイルが最初のフィールドですでにソートされているように見えます。その場合:

join file1 file2

ファイルが大きい限り、最高です。

2
jthill