Frage

Angenommen, ich habe zwei Listen von Zahlen in Dateien f1, f2, jede Zahl eines pro Zeile. Ich möchte sehen, wie viele Zahlen in der ersten Liste sind nicht in der zweiten und umgekehrt. Derzeit bin ich mit grep -f f2 -v f1 und dann dieses Skript mit einer Schale zu wiederholen. Das ist ziemlich langsam (quadratische Zeit weh tut). Gibt es eine schönere Art und Weise, dies zu tun?

War es hilfreich?

Lösung

Ich mag ‚Komm‘ für diese Art der Sache. (Dateien müssen sortiert werden.)

$ 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
$ 

Andere Tipps

können nicht nur Sie jede Zahl in einer einzigen Zeile setzen und dann diff (1), um sie? Sie könnten die Listen vorher sortieren müssen, obwohl dafür richtig zu arbeiten.

Im speziellen Fall, in dem eine Datei ist eine Teilmenge der anderen , die folgenden:

cat f1 f2 | sort | uniq -u

würde Liste der Zeilen nur in die größeren Datei. Und natürlich Rohrleitungen wc -l wird die Zählung zeigen.

Das ist jedoch nicht genau, was Sie beschrieben.

Dieser Einzeiler dient meinen besonderen Bedürfnissen oft, aber ich würde gerne eine allgemeinere Lösung sehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top