2 Dateien zeilen-weise vergleichen

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von L0rd, 19.05.2006.

  1. L0rd

    L0rd Mitglied

    Dabei seit:
    28.04.2006
    Beiträge:
    38
    Zustimmungen:
    0
    Hallo an Alle

    ich habe 2 Dateien, einmal ne Gesamtliste gliste und ne Neuliste nliste
    in beiden stehen Benutzernamen und zwar zeilenweise, so ungefähr:



    gliste
    Code:
    nikster77
    wolfgang
    xanti
    belubaba
    rikola
    sniffer
    hoernchen
    onlineuser
    .
    .
    .
    .
    
    ca. 1600 Zeilen:)



    nliste
    Code:
    nikster77
    wolfgang
    auskenner
    belubaba
    rikola
    bazzty
    onlineuser
    heuri
    .
    .
    .
    .
    

    jetzt sollte die gliste vervollständigt werden mit Einträgen aus nliste welche die gliste noch nicht hat. Das wären dann:

    auskenner
    bazzty
    heuri


    Danach sollte die gliste so aussehen:
    Code:
    nikster77
    wolfgang
    xanti
    belubaba
    rikola
    sniffer
    hoernchen
    onlineuser
    auskenner
    bazzty
    heuri
    .
    .
    .
    
    ich habe es schon mit diff und compare versucht, aber da kriege ich keine brauchbare Ergebnisse. Und google spuckt nur verzeichnis vergleiche und son Zeug raus X(

    Hat jemand ne Idee wie es gehen würde ?
    Für paar Zeilen Code würde ich auch sehr dankbar :D
     
  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. #2 Xanti, 19.05.2006
    Zuletzt bearbeitet: 19.05.2006
    Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Interessante Listen führst Du ;)

    Auf die Schnelle würde ich folgendes vorschlagen:

    Code:
    for i in $(cat nlist); do if [ $(grep -c $i glist) -eq 0 ]; then echo $i >> tlist ; fi; done; cat tlist >> glist; rm tlist
    
    Gruss, Xanti
     
  4. #3 Sir Auron, 19.05.2006
    Sir Auron

    Sir Auron Routinier

    Dabei seit:
    26.04.2004
    Beiträge:
    482
    Zustimmungen:
    0
    man comm
     
  5. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Interessant, das kannte ich noch nicht.

    Gruss, Xanti
     
  6. L0rd

    L0rd Mitglied

    Dabei seit:
    28.04.2006
    Beiträge:
    38
    Zustimmungen:
    0
    Tja, jetzt seit ihr auf meiner Liste :rtfm:
    genauer meiner Testliste:)

    ich hab's mit comm auch probiert, aber ich wusste net, dass die Listen vorher sortiert sein müssen,
    sonst kommt nichts brauchbares raus. Hier:
    Code:
    comm -13 gliste nliste | cat >> gliste
    
    wobei die Lösung von Xanti kann man einfach drauf los anwenden. Danke Xanti ! Danke Sir Auron !

    Da wir bei Listen sind, fällt mir noch ein, dass ich
    die mehrfach Einträge rasulöschen wollte
    (so dass jeder Benutzer nur einmal vorkommt und nicht 2 oder 3 fach in der Liste)
    sowie die Zeilen die gänsefüsschen enthalten und leere Zeilen. Da kennt ihr bestimmt was ;)
     
  7. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Ich denke mal, dass Du mit uniq und grep das kleine Problem lösen wirst.

    Gruss, Xanti
     
  8. L0rd

    L0rd Mitglied

    Dabei seit:
    28.04.2006
    Beiträge:
    38
    Zustimmungen:
    0
    :) naja ich bin kein Freund von sortieren, deswegen kann ich uniq nicht anwenden :(
     
  9. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Code:
    touch newlist; for i in $(cat glist); do if [ $(grep -c $i newlist) -eq 0 ]; then echo $i >> newlist; fi; done; mv newlist glist
    
    Gruss, Xanti
     
  10. #9 Wolfgang, 20.05.2006
    Zuletzt bearbeitet: 20.05.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Nur so zur Ergänzung für ähnliche Probleme:
    Größte gemeinsame Schnittmenge beliebig vieler Dateien:
    Code:
    perl -ne 'BEGIN{$c=$#ARGV} print $_ if ++$found{$_} > $c' first.txt second.txt more.txt
    Wills du das was nicht in allen Dateien vorkommt:
    Code:
    perl -ne 'BEGIN{$c=$#ARGV} print $_ unless ++$found{$_} > $c' first.txt second.txt more.txt
    Das geht natürlich nur, wenn die Einträge innerhalb einer Datei nicht doppelt vorkommen.

    Um eine Datei direkt zu bereinigen, also alle doppelten Einträge und Leerzeilen zu entfernen geht das auch mit perl (mit sed und uniq natürlich auch)
    Hier die Perlvariante, ohne dass sortiert wird.
    Das kann bei größeren Datenmengen nützlich sein.
    Code:
    perl -pi -e 's/$_// if((++$found{$_}>1)||(/^$/));' test
    Aber hier wird trotzdem mindestens die Speichermenge für alle eindeutigen Elemente benötigt. Das ist beim Sortieren aber allgemein so. Hier werden jedenfalls doppelte Elemente nicht gespeichert, was ein wenig weniger Platz braucht. Eins so bereinigte Datei sortiert sich dann schneller.

    Um Hochkommas zu entfernen ist wohl tr am schnellsten.
    geht aber auch mit perl direkt
    Code:
    perl -pi -e s!"!!g' test
    Zum Schluss noch einen Perleinzeiler, der aus einer im obigen Sinne bereinigten Datei alle Elemente findet, die in der ersten Datei nicht vorkommen und daraus eine Schnittmenge bildet:
    Code:
    perl -ne '(($h{$_}.= @ARGV) =~ /10$/) ? print : 1' Datei1 Datei2 >Ausgabedatei 
    
    Gruß Wolfgang
     
  11. L0rd

    L0rd Mitglied

    Dabei seit:
    28.04.2006
    Beiträge:
    38
    Zustimmungen:
    0
    Das mit sortieren, filtrieren und was ich noch so hier gefragt habe,
    habe ich schon in der Zeit selbs hingekriegt.

    das einzige was ich noch nicht hingekriegt habe, wäre dann,
    die Zeilen löschen die wenniger als 6 Zeichen haben.
    (Benutzername muss mind. 6 Zeichen lang sein)

    hab schon was gebastelt mit sed aber das schnitt in jeder zeile die ersten 5 zeichen ab :think:
     
  12. #11 Wolfgang, 20.05.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo

    sed -e '/.\{6,\}/!d' datei
    ;)

    Bei GNU sed geht sogar die Option -i
    sed -i -e '/.\{6,\}/!d' datei
    Gruß Wolfgang
     
  13. L0rd

    L0rd Mitglied

    Dabei seit:
    28.04.2006
    Beiträge:
    38
    Zustimmungen:
    0
    Es geht jetzt alles !

    Danke schön !
     
  14. Bazzty

    Bazzty Grünschnabel

    Dabei seit:
    14.03.2006
    Beiträge:
    9
    Zustimmungen:
    0
    öhm naja,

    ka, warum mein name da gerade auftaucht ^^
    hab auch gerade keine Zeit zum lesen...
    .....
     
  15. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  16. #14 Wolfgang, 15.01.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Und was willst du uns jetzt damit sagen?
    Oder war das nur sinnloses Gespame?

    Wolfgang
     
  17. plepps

    plepps Grünschnabel

    Dabei seit:
    17.05.2006
    Beiträge:
    3
    Zustimmungen:
    0
    hi,

    das gute alte sort tut's nicht?:

    Code:
    sort -u gliste nliste > /tmp/xliste && mv /tmp/xliste gliste 


    der tom
     
Thema: 2 Dateien zeilen-weise vergleichen
Besucher kamen mit folgenden Suchen
  1. dateivergleich schnittmenge

    ,
  2. linux vergleichen in beiden zeile

Die Seite wird geladen...

2 Dateien zeilen-weise vergleichen - Ähnliche Themen

  1. Alle Dateien eines Verzeichnisses mit einer anderen Datei vergleichen

    Alle Dateien eines Verzeichnisses mit einer anderen Datei vergleichen: Hallo, ich habe ein Verzeichnis, darin enthalten sind mehrere Dateien. Nun möchte ich alle Dateien (Parameter $1) gegen eine konstante Datei...
  2. Dateien selektieren und zählen

    Dateien selektieren und zählen: Hallo, das ist mein erster Beitrag, bitte entschuldigt, falls nicht alles richtig geschrieben ist. Ich muss meine erste Hausaufgabe als...
  3. Benötige Hilfe- Dateien vergleichen

    Benötige Hilfe- Dateien vergleichen: Hallo, für eine Arbeit an der Uni muss ich einige viele Bilder miteinander vergleichen, was ich gerne durch eine Automatisierung etwas...
  4. Amarok streikt bei *.m4a Dateien

    Amarok streikt bei *.m4a Dateien: Hallo zusammen, vor Kurzem habe ich einen neuen Rechner zusammengebaut und mit OpenSuse 13.2 aufgesetzt. Nun musste ich aber feststellen, dass...
  5. Zertifikatsdateien

    Zertifikatsdateien: Hallöchen und einen schönen Abend! Ich habe zurzeit folgendes Problem. Ich habe eine SSL Wildcard für subdomain (als Beispiel *.example.com). Ich...