2つのファイルがあります。
A0001 C001
B0003 C896
A0024 C234
.
B1542 C231
.
upto 28412 such lines
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;
}
しかし失敗します。
awk
を使用できます:
$ awk 'FNR==NR{a[$1];next}($1 in a){print}' file2 file1
A0001 C001
A0024 C234
B1542 C231
これは仕事をするはずです:
grep -Ff File2 File1
-f File2
はFile2
からパターンを読み取り、-F
はパターンを固定文字列として扱います(つまり、正規表現は使用されません)。
両方のファイルが最初のフィールドですでにソートされているように見えます。その場合:
join file1 file2
ファイルが大きい限り、最高です。