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;
}
しかし、それは失敗しました。
答え1
これを行う必要があります。
grep -Ff File2 File1
-f File2
ここでパターンを読み、パターンを固定文字列としてFile2
扱います-F
(つまり、正規表現は使用されません)。
答え2
あなたはそれを使用することができますawk
:
$ awk 'FNR==NR{a[$1];next}($1 in a){print}' file2 file1
A0001 C001
A0024 C234
B1542 C231
答え3
どちらのファイルも最初のフィールドにソートされているようです。もしそうなら、
join file1 file2
ファイルサイズが大きい場合に最適です。