Alle Dateien eines Verzeichnisses mit einer anderen Datei vergleichen

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von abcdef, 11.10.2016.

  1. abcdef

    abcdef Grünschnabel

    Dabei seit:
    11.10.2016
    Beiträge:
    3
    Zustimmungen:
    0
    Hallo,

    ich habe ein Verzeichnis, darin enthalten sind mehrere Dateien. Nun möchte ich alle Dateien (Parameter $1) gegen eine konstante Datei (Parameter $2) gegen vergleichen und die Unterschiede aufzeigen. Diese können dann am Ende einfach in einer Textdatei abgelegt werden.

    Bisher habe ich
    Code:
    #!/bin/bash
    for i in $1\*.txt
    do cat $i $2| sort | uniq -d
    done
    exit 1
    Soweit so gut. "for i in $1\*.txt do" nutze ich, um alle Textdateien vom Verzeichnis anzusprechen (da es auch nur um diese gehen soll). Mit dieser Variante kann ich aber nicht arbeiten, da er alle Dateien bei cat zusammenfasst und dann vergleicht. Die Dateien sollen aber alle separat behandelt werden. Ich hatte schon überlegt wie man jede Datei einzeln ansprechen kann bzw. wie man die Schleife ausbauen kann, komme aber auf keine Lösung.
     
  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 hellfire, 11.10.2016
    hellfire

    hellfire Eroberer

    Dabei seit:
    25.05.2016
    Beiträge:
    51
    Zustimmungen:
    9
    Grundsätzlich gäbe es da mal diff, dass Dir Unterschiede zeigt. Was möchtest Du denn mit den Unterschieden machen, wenn Du sie hast?
     
  4. abcdef

    abcdef Grünschnabel

    Dabei seit:
    11.10.2016
    Beiträge:
    3
    Zustimmungen:
    0
    Alle Treffer in eine seperate Datei schreiben. Also Datei 1 mit Datei X abgleichen und die Treffer (Gemeinsamkeiten) in Datei1_Treffer.txt speichern. Das gleiche mit Datei 2 und Datei X und so weiter. Datei X ist meine Konstante und wird mit allen Dateien 1-n in meinem Verzeichnis verglichen.
     
  5. #4 hellfire, 11.10.2016
    hellfire

    hellfire Eroberer

    Dabei seit:
    25.05.2016
    Beiträge:
    51
    Zustimmungen:
    9
    Code:
    #!/bin/bash
    feste_datei="$2"
    ordner="$1"
    for andere_datei in $ordner\*.txt
    do cat $andere_datei $feste_datei| sort | uniq -d >${andere_datei}.gemeinsamkeiten
    done
    # Wieso exit 1?
    exit 1
    
    Gute Lektüre
    http://openbook.rheinwerk-verlag.de/shell_programmierung/
     
  6. marce

    marce Kaiser

    Dabei seit:
    01.08.2007
    Beiträge:
    1.056
    Zustimmungen:
    8
    klingt eher nach einem Job für grep...
     
  7. abcdef

    abcdef Grünschnabel

    Dabei seit:
    11.10.2016
    Beiträge:
    3
    Zustimmungen:
    0
    Damit stoße ich wieder auf das Ausgangsproblem: Die Dateien werden nicht separat gespeichert. Das Ergebnis ist EINE .gemeinsamkeiten-Datei (in diesem Fall wenn ich alle *.txt anspreche heißt diese *.txt.gemeinsamkeiten) wo alle Treffer der einzelnen Dateien abgelegt sind.

    Das Problem ist hierbei nicht wie ich den Befehl aufsetze um die Dateien zu vergleichen. Vielmehr geht es darum alle separat zu behandeln - ohne feste Angabe wieviele Dateien nun im Verzeichnis abgelegt sind.
     
  8. marce

    marce Kaiser

    Dabei seit:
    01.08.2007
    Beiträge:
    1.056
    Zustimmungen:
    8
    dann ersetze doch das Ziel der Ausgabeumleitung durch den entsprechenden Dateinamen - sprich die entsprechende Variable mit Suffix / Präfix /...

    Ich würde trotzdem sagen - mit grep bekommst Du das Ergebnis einfacher...
     
  9. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  10. #8 hellfire, 12.10.2016
    Zuletzt bearbeitet: 12.10.2016
    hellfire

    hellfire Eroberer

    Dabei seit:
    25.05.2016
    Beiträge:
    51
    Zustimmungen:
    9
    Sorry, aber das sollte genau so sein wie Du es Dir wünscht. Wenn Du 4 Dateien hast, davon 3 im Ordner $ordner, dann hast Du nach dem Aufruf 3 weitere Dateien mit dem Namen der Datei in $ordner und der Endung .gemeinsamkeiten.

    Ansonsten fällt mir da gerade etwas auf:

    Code:
    # Das ist falsch:
    
    $ordner\*.txt
    
    # Das ist richtig:
    
    $ordner/*.txt
    -------------

    Ich habe Deinen Code mal interpretiert und ignoriert was Du gesagt hast. Dementsprechend war ich auf dem Holzweg. :)

    Du willst eher so etwas:

    Code:
    #!/bin/bash
    
    # Aufruf: dasprogram festedatei.txt *.txt
    
    feste_datei="$1"
    shift
    vergleichs_dateien="$*"
    for akt_vergleich in  $vergleichs_dateien; do
      cat $feste_datei $akt_vergleich | sort | uniq -d >${akt_vergleich}.gemeinsam
    done
    Bei obigem Vergleich vergleicht er festedatei.txt auch mit sich selbst, weil *.txt u. a. zu festedatei.txt aufgelöst wird. Das überlasse ich mal Dir das rauszufiltern.
     
  11. marce

    marce Kaiser

    Dabei seit:
    01.08.2007
    Beiträge:
    1.056
    Zustimmungen:
    8
    Code:
    grep -f ${referenzdatei} ${datei} > ${datei}_ref
    Schleife drumrum, fertig.

    Ihr könnt euch natürlich auch zu tode pipen und massiven Overhead generieren.
     
Thema:

Alle Dateien eines Verzeichnisses mit einer anderen Datei vergleichen

Die Seite wird geladen...

Alle Dateien eines Verzeichnisses mit einer anderen Datei vergleichen - Ähnliche Themen

  1. Alle Textdateien eines Verzeichnisses mit Header ausstatten

    Alle Textdateien eines Verzeichnisses mit Header ausstatten: Hallo liebe Community. Ich soll ein Script schreiben, welches innerhalb von einem Verzeichnis alle .txt Dateien mit einer beliebigen ersten...
  2. Paralleles packen von Dateien

    Paralleles packen von Dateien: Sehr geehrte Dame und Herren, ich bin neu hier im forum deshalb begrüsse ich alle recht herzlich :). Ich habe ein Problem, ich habe auf...
  3. index.php funktioniert aber alle andere .php Dateien nicht

    index.php funktioniert aber alle andere .php Dateien nicht: Ich hab auf meinen Notebook apache2 installiert mit php5 und mysql. Ich hab das problem das er mit den php code nicht ausführt. Besser gesagt...
  4. Alle Dateien eines Ordners umbennenen

    Alle Dateien eines Ordners umbennenen: Hallo Forum, ich benutze einen Mac, allerdings möchte ich mir ein Shellskript basteln und habe allerdings keine Ahnung wie! Bin absolute neu in...
  5. Samba zeigt nicht alle Dateien an

    Samba zeigt nicht alle Dateien an: Nabend, ich habe das Problem, dass mein Samba Server, der bis gestern Abend immer richtig funktioniert hat und an dessen Konfiguration ich...