diff - unterschiede zählen!

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von flappinski, 16.11.2006.

  1. #1 flappinski, 16.11.2006
    Zuletzt bearbeitet: 16.11.2006
    flappinski

    flappinski Foren As

    Dabei seit:
    31.03.2006
    Beiträge:
    87
    Zustimmungen:
    0
    Hallo,
    ich habe zwei Dateien, bei denen ich die unterschiedlichen Zeilen zählen möchte und nur diese Anzahl dann ausgeben möchte. Gibt es eine direktere Möglichkeit als eine wc -l in die pipe?
    2) kann ich bestimmte Spalten aus dem Vergleich ausschliessen? Auch hier muss ich erst die beiden Dateien mit einem cut bearbeiten, bevor ich sie in den diff stecke:
    Hier ein Beispiel:

    File1:
    TT2315086 2 0.0329588
    TT2315087 1 0.00167415
    TT2315088 1 0.00586605
    TT2315089 0 8.64756e-05
    TT2315090 0 0.0106137
    TT2315091 2 0.00159894
    TT2315092 1 0.00409351
    TT2315093 0 0.0544389
    TT2315094 1 0.114404
    TT2315095 0 0.00440519

    File2:
    TT2315086 2 0.0105152
    TT2315087 1 0.0116913
    TT2315088 1 0.033686
    TT2315089 1 0.000354367
    TT2315090 0 0.00980663
    TT2315091 2 0.00840145
    TT2315092 1 0.0076736
    TT2315093 0 0.00870657
    TT2315094 1 0.0150486
    TT2315095 0 0.00415337


    Da soll die Zahl 1 rauskommen. Ich gehe so vor:
    cut -f 1,2
    bei beiden Dateien, dann ein

    comm -3 -2 | wc -l

    irgendwie umständlich....
    Viele Grüsse,
    Stephan
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. theton

    theton Bitmuncher

    Dabei seit:
    27.05.2004
    Beiträge:
    4.820
    Zustimmungen:
    0
    Ort:
    Berlin, Germany
    Man kann Befehle mit doppeltem Und-Zeichen '&&' verknüpfen. Schon hast du es in einem Befehl. Um an einzelne Spalten zu kommen hilft 'awk' weiter.
     
  4. #3 x-lette, 16.11.2006
    x-lette

    x-lette Mitglied

    Dabei seit:
    23.04.2006
    Beiträge:
    44
    Zustimmungen:
    0
    Ort:
    Berlin
    Gefährlich, wenn die Möglichkeit besteht, daß das erste Kdo einen Exitstatus != 0 zurückgibt. Denn dann wird abgebrochen: "&&" ist ein logisches UND.
    Eine davon unabhängige Verkettung kann auf der Shell per ";" erreicht werden.

    Wenn der Befehl häufig aufgerufen wird, empfiehlt es sich ja sowieso ein kleines Skript zu schreiben. Je nach Quelle der Dateien ist eine Zwischenlagerung (temporäre Datei oder fifo) sowieso unumgänglich, da ich spontan auch nicht wüßte, wie man in einer pipe aus beiden Dateien die Spalten entfernt und trotzdem zwei Dateien behält. Ein entsprechend intelligentes diff ist mir auch nicht bekannt. Auch für das Zählen fällt mir nichts besseres ein. Wobei ich dein letztes Kdo (mit dem wc) doch recht elegant finde.
    Was spricht dagegen?

    Gruß
    XL
     
  5. theton

    theton Bitmuncher

    Dabei seit:
    27.05.2004
    Beiträge:
    4.820
    Zustimmungen:
    0
    Ort:
    Berlin, Germany
    Was ist daran gefährlich? Ist doch wohl absolut korrekt, dass die restlichen Befehle nicht mit falschen oder unvollständigen Daten arbeiten sollen. Es ist also wohl eher besser, als nachher zig falsche Daten zu haben, weil man garnicht mitbekommen hat, dass im Befehl 1 was falsch lief und die restlichen Befehle dann mit falschen Daten gerarbeitet haben.
     
  6. #5 flappinski, 16.11.2006
    flappinski

    flappinski Foren As

    Dabei seit:
    31.03.2006
    Beiträge:
    87
    Zustimmungen:
    0
    bin ganz zufrieden (fast)

    also, inzwischen habe ich das problem (fast) geloest. Mir gefällt nur nicht, dass irgendwie der comm Befehl spinnt: hier zwei dateien:
    1:
    TT-2315060 1
    TT-2315061 1
    TT-2315062 1
    TT-2315057 1
    TT-2315058 0
    TT-2315059 1
    2:
    TT-2315060 1
    TT-2315061 2
    TT-2315062 2
    TT-2315057 0
    TT-2315058 0
    TT-2315059 1

    eigentlich deutlich, dass nur drei zeilen stimmen, oder?
    diff file1 file2 | grep "<" | wc -l ergibt 3 (wunderbar)
    comm file1 file2 zeigt nur eine gleiche Zeile (die erste) an! Woran liegt das?


    Danke für die vorherigen Tips, ich mache es inzwischen mit temporären Dateien, funktioniert wunderbar....
     
  7. #6 x-lette, 16.11.2006
    x-lette

    x-lette Mitglied

    Dabei seit:
    23.04.2006
    Beiträge:
    44
    Zustimmungen:
    0
    Ort:
    Berlin
    OK, war mißverständlich: es gibt Programme, die liefern ein korrektes Ergebnis, setzen den Statuscode aber auf einen Wert ungleich null, weil sie damit etwas über die eigene Arbeit mitteilen wollen. Das muß man berücksichtigen, wenn man mit "&&" arbeitet.
    Oder andersherum: Nur wenn ich absolut sicher bin, daß mein Programm A nur im Fehlerfall den Statuscode anders setzt, kann ich per "&&"-Verknüpfung meine pipe bauen.
    War auch nicht auf diesen speziellen Fall gemünzt, sondern sollte die Allgemeingültigkeit deines Tips etwas einschränken.

    An einem ähnlichen Problem hing ich nämlich mal eine Weile fest, weil das Prog (weiß grad gar nicht mehr, was das war :( ) drei verschiedene Arten von Statuscodes gesetzt hatte:

    Alles OK
    Alles OK und was ich dabei noch sagen wollte .....
    Fehler

    Die zweite Klasse beherbergte etwa ein Dutzend Codes. Alle ungleich null, aber der Output war trotzdem korrekt!

    Gruß
    XL
     
  8. #7 flappinski, 16.11.2006
    flappinski

    flappinski Foren As

    Dabei seit:
    31.03.2006
    Beiträge:
    87
    Zustimmungen:
    0
    hey, habt ihr mich nicht gehört?
     
  9. #8 x-lette, 16.11.2006
    x-lette

    x-lette Mitglied

    Dabei seit:
    23.04.2006
    Beiträge:
    44
    Zustimmungen:
    0
    Ort:
    Berlin
    :D Doch schon, aber wenns funzt, muss man ja nicht mehr kommentieren, oder doch?
    Und dieses 'comm' hab ich ehrlich gesagt heute zum ersten mal gesehen :rolleyes: Da kann ich dir leider nicht weiterhelfen.


    Ha, aber beim nochmaldraufgucken seh ich wohl die Lösung: comm vergleicht sortierte Dateien; deien Daten sind aber unsortiert. Da bricht es wohl ab.

    Gruß
    XL
     
  10. #9 flappinski, 17.11.2006
    flappinski

    flappinski Foren As

    Dabei seit:
    31.03.2006
    Beiträge:
    87
    Zustimmungen:
    0
    meinste wirklich das liegt an sortierte dateien. jedenfalls läufts mit diff und gut is; comm kennt eh keine sau. gute nacht.
     
  11. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  12. #10 Schlaubi_fi.de, 17.11.2006
    Schlaubi_fi.de

    Schlaubi_fi.de Mac OS X User

    Dabei seit:
    22.12.2004
    Beiträge:
    304
    Zustimmungen:
    0
    Wieso probierst Du es nicht einfach aus (und sortierst die Dateien vorher)?
     
  13. #11 Wolfgang, 17.11.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Ein Blick in die Manpage von comm genügt, um das zu wissen. ;)

    Gruß Wolfgang
     
Thema:

diff - unterschiede zählen!

Die Seite wird geladen...

diff - unterschiede zählen! - Ähnliche Themen

  1. diff in Bezug zu sed setzen

    diff in Bezug zu sed setzen: Hallo liebe Community, ich sitze seit gestern an einem Problem bei dem ihr mir hoffentlich helfen könnt. Meine Aufgabe ist es zwei...
  2. Bash - Zwei Binärdateien vergleichen (SQL Diff)

    Bash - Zwei Binärdateien vergleichen (SQL Diff): Moin, versuche zwei SQL Dumps miteinander zu vergleichen, dazu hole ich Stammdaten aus der MSSQL-DB und speichere sie direkt unter der Bash in...
  3. Wie ermittle ich die Differenz zwischen 2 Zahlen unter AIX (Syntax ähnl. wie LINUX) ?

    Wie ermittle ich die Differenz zwischen 2 Zahlen unter AIX (Syntax ähnl. wie LINUX) ?: Wie ermittle ich die Differenz zwischen 2 Zahlen unter AIX (Syntax ähnl. wie LINUX) ? Und wenn die Differenz nicht "0" ist, dann folgt Aktion ...
  4. Modulo C++ implementation (Diffie-Hellman-Schlüsselaustausch)

    Modulo C++ implementation (Diffie-Hellman-Schlüsselaustausch): Hi! Also ich hoffe einmal (ich gehe fast davon aus :D ), dass einige Leute hier im Forum den Diffie-Hellman-Schlüsselaustausch kennen. Unser...
  5. Patch erstellen mit patch oder diff

    Patch erstellen mit patch oder diff: Hallo zusammen Versuche gerade die Sache mit den Patches wirklich zu verstehen, denn ich habe nicht viel Erfahrung damit. Habe folgende...