2

ファイル f1、f2 に 2 つの数値リストがあり、それぞれの数値が 1 行に 1 つずつあるとします。最初のリストで 2 番目のリストにない数と、その逆の数を確認したい。現在、grep -f f2 -v f1 を使用してから、シェル スクリプトを使用してこれを繰り返しています。これはかなり遅いです (二次時間が痛い)。これを行うより良い方法はありますか?

4

3 に答える 3

8

こういうのは「comm」が好きです。(ファイルはソートする必要があります。)

$ 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
$ 
于 2009-10-21T15:15:53.960 に答える
2

それぞれの数字を 1 行にまとめてdiff(1) 入れていただけないでしょうか? 適切に機能させるためには、事前にリストをソートする必要があるかもしれません。

于 2009-10-21T11:35:44.640 に答える
1

1 つのファイルが他のファイルのサブセットである特殊なケースでは、次のようになります。

cat f1 f2 | sort | uniq -u

大きなファイルの行のみをリストします。そしてもちろん、にパイプするwc -lとカウントが表示されます。

しかし、それはまさにあなたが説明したものではありません。

このワンライナーは私の特定のニーズに頻繁に対応しますが、より一般的な解決策を見たいと思っています。

于 2009-10-21T12:08:40.030 に答える