シェルスクリプトを使用して 2 つのリストを比較する
-
05-07-2019 - |
質問
ファイル f1、f2 に、1 行に 1 つの数字が含まれる 2 つの数字のリストがあるとします。最初のリストにある数字のうち 2 番目にない数字がいくつあるか、またその逆の数を確認したいと思います。現在、 grep -f f2 -v f1 を使用し、シェルスクリプトを使用してこれを繰り返しています。これはかなり遅いです (二次時間が痛いです)。これを行うより良い方法はありますか?
解決
私はこの種の「通信」が好きです。 (ファイルはソートする必要があります。)
$ cat f1
1
2
3
$ cat f2
1
4
5
$ comm f1 f2
1
2
3
4
5
$ comm -12 f1 f2
1
$ comm -23 f1 f2
2
3
$ comm -13 f1 f2
4
5
$
他のヒント
各番号を1行に入れてから diff
(1)しませんか?リストを適切に機能させるために、事前にリストをソートする必要がある場合があります。
特殊なケースでは、 一方のファイルはもう一方のファイルのサブセットです, 、 次の:
cat f1 f2 | sort | uniq -u
行をリストします だけで より大きなファイル。そしてもちろん、への配管 wc -l
カウントが表示されます。
ただし、それはあなたが説明したとおりではありません。
このワンライナーは私の特定のニーズによく応えますが、より一般的な解決策が知りたいと思っています。
所属していません StackOverflow