Datei mit LIste vergleichen

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von locuststar, 15.03.2007.

  1. #1 locuststar, 15.03.2007
    locuststar

    locuststar Grünschnabel

    Dabei seit:
    13.03.2007
    Beiträge:
    4
    Zustimmungen:
    0
    Hi zusammen

    ich möchte eine Datei nach einer Menge von Strings durchsuchen (etwa 100) und bei einem Match die entsprechende Zeile nicht ausgeben.

    Dachte ich mach das irgendwie mit awk und einem Array in dem die Strings drinstehen aber ich steh aufm Schlauch.

    Weil ich das mit den arrays in awk bisher auch nicht blicke dachte ich, ich machs mal schnell so:

    awk ' { e=system("grep $10 /tmp/Stringliste"); if ( e == 0 ) print $0 }' /tmp/Datei

    Dabei kommt auch nur Müll raus.

    Hat jemand einen Tip zur Vorgehensweise?

    Danke und Gruß

    Tom
     
  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 Wolfgang, 15.03.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Grep bietet die Option -f<FILE mit Muster> an.
    Das in Verbindung mit -v könnte doch dein Problem elegant und performant lösen.

    Gruß Wolfgang
     
  4. #3 locuststar, 15.03.2007
    locuststar

    locuststar Grünschnabel

    Dabei seit:
    13.03.2007
    Beiträge:
    4
    Zustimmungen:
    0
    :D Kräh.....
    Stimmt, tuts auch.

    Und mir raucht der Kopf, dass man meint, man steht im Herbst an der Themse..... :think:

    Thx.
     
  5. hansen

    hansen Grünschnabel

    Dabei seit:
    24.03.2007
    Beiträge:
    2
    Zustimmungen:
    0
    Datei nach Strings durchsuchen, was ist falsch?

    Hallo

    ich kämpfe mit einem ähnlichen Problem. Ich möchte aber wissen, welche Strings der Liste in einer Datei nicht vorhanden sind. Grundsätzlich habe ich eine für mich zum Erfolg führende Lösung gefunden. Doch irgend etwas läuft ganz schräg... Das Resultat ist erst nach dem 5ten Durchgang richtig. Was ist falsch? Wie könnte man das Ding verbessern oder vereinfachen?

    Hier mein Script (ich nummeriere mal):

    1. grep -of liste.txt my.html | sort | uniq > tmp;
    2. cat liste.txt >> tmp;
    3. sort tmp | uniq -u > result;
    4. grep -c .jpg result;
    5. cat result > liste.txt;

    Beschreibung:
    1. Im File my.html nach allen Strings aus liste.txt suchen. Sortieren und 'uniq' - da sie mehrfach vorhanden sein können. Das Ganze zwischenspeichern.

    2. Alle Strings aus liste.txt der Zwischenablage zufügen. -> Jetzt sind alle im File my.html vorhandenen Strings doppelt. Für die Anderen interessiere ich mich!

    3. Zwischenablage sortieren und alle einmal vorkommenden Strings auslesen. Das sollte nun mein Resultat sein. Doch aus irgend einem Grund erhalte ich hier auch noch einige Strings, die im File my.html vorhanden sind. Aus diesem Grund 4. und 5.

    4. Zählen der Strings (Jep es sind Bilder. Wer hats begriffen?)

    5. sollte klar sein...

    Danke für eure Hilfe
    hansen
     
  6. #5 Wolfgang, 25.03.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Ich bin mir nicht sicher, ob ich dich verstanden habe.
    Generell gilt einfach für grep:
    1) -f file ->jede INPUT-Zeile (Datei oder STDIN) wird nach allen Strings in file durchsucht. Dabei muss file nicht sortiert sein.
    2) Grep arbeitet Zeilenorientiert, was bei html eventuell zu Problemen führen kann.
    3) mit -o werden nur die gesuchten Strings ausgegeben

    Das was du da versuchst schaut mir etwas abenteuerlich aus.
    Besonders Punkt 2 und 3.
    Du verdoppelst es, um es anschließend wieder zu bereinigen.????
    Eventuell poste doch mal ein paar Zeilen deiner beiden Dateien, und was du erwartest.


    Gruß Wolfgang
     
  7. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  8. hansen

    hansen Grünschnabel

    Dabei seit:
    24.03.2007
    Beiträge:
    2
    Zustimmungen:
    0
    Hallo Wolfgang

    Danke für deine Antwort. Abenteuerlich :-) so bin ich auch vorgegangen. Ich hab einfach mal probiert, gelesen, probiert etc.

    Aufgabestellung:
    Das .html file ist in wirklichkeit ein TiddlyWiki, also JS. Darin werden dutzende Bilder vom Typ jpg referenziert. Ich möchte nun heraufinden, welche Bilder ich nicht referenziert (vergessen) habe.

    1) 'sort' kann ich raus nehmen, da hast du recht.
    2) Jep, sollte aber kein problem sein. html == txt
    3) Mit -o werden wohl nur die gesuchten 'und gefundenen' Strings ausgegeben. so weiss ich schon mal, welche Bilder feferenziert werden. Aber noch nicht, welche nicht.
    4) Ich verdopple, um anschliessend mit 'uniq' die nicht referenzierten Bilder zu ermitteln.

    Unten hab ich Beispieldaten. Als resultat habe ich hier eine Auflistung: test1.jpg test2.jpg test3.jpg


    Teil des .html files:
    n/img_2048.jpg]] [[img_2050.jpg|bilder/cape_tribulation/img_2050.jpg]]\n\n!! Am Strand - die Ruhe...\n[img[bilder/cape_tribulation/img_2052.jpg]]\n[img[bilder/cape_tribulation/img_2056.jpg]]\n[img[bilder/cape_tribulation/img_2064.jpg]]\nweitere... [[img_2053.jpg|bilder/cape_tribulation/img_2053.jpg]] [[img_2054.jpg|bilder/cape_tribulation/img_2054.jpg]] [[img_2055.jpg|bilder/cape_tribulation/img_2055.jpg]] [[img_2057.jpg|bilder/cape_tribulation/img_2057.jpg]] [[img_2058.jpg|bilder/cape_tribulation/img_2058.jpg]] [[img_2061.jpg|bilder/cape_tribulation/img_2061.jpg]] [[img_2062.jpg|bilder/cape_tribulation/img_2062.jpg]] [[img_2063.jpg|bilder/cape_tribulation/img_2063.jpg]] [[img_2065.jpg|bilder/cape_tribulation/im

    Suchliste:
    test1.jpg
    img_2048.jpg
    img_2050.jpg
    img_2050.jpg
    img_2052.jpg
    img_2053.jpg
    img_2053.jpg
    img_2054.jpg
    img_2054.jpg
    img_2055.jpg
    img_2055.jpg
    img_2057.jpg
    img_2057.jpg
    test2.jpg
    img_2058.jpg
    img_2058.jpg
    img_2061.jpg
    img_2061.jpg
    img_2062.jpg
    img_2062.jpg
    img_2063.jpg
    img_2063.jpg
    img_2065.jpg
    test3.jpg

    Gruss, hansen
     
  9. #7 Fallout, 26.03.2007
    Zuletzt bearbeitet: 26.03.2007
    Fallout

    Fallout Doppel-As

    Dabei seit:
    02.03.2007
    Beiträge:
    120
    Zustimmungen:
    0
    Hi,

    also wenn Deine Eingangsdatei - wie offensichtlich Dein Beispiel - nicht zeilenorientiert ist, würde ich grep ganz weglassen und eher auf sed setzen.

    Code:
    cp htmlfile tmpfile; for picfile in `cat piclist`; do mv tmpfile srcfile; sed -e "s/\[[^[]*\[.*$picfile[^]]*\]\]//g" srcfile > tmpfile; done; rm srcfile; mv tmpfile resultfile
    Das Script geht jeden Bildnamen aus picfile durch und schneidet diesen inklusive seiner Umgebung (anhand des regex \[[^[]*\[.*$bildname[^]]*\]\]) aus dem Text von htmlfile bzw. srcfile heraus und schreibt den Rest in tmpfile, welches für das nächste Bild dann wieder zum srcfile wird.
    Ggf. gibt es auch noch eine elegantere Lösung für das Dateimanagement, aber das Ergebnis zählt ;-)

    Edit: Man könnte es auch mit
    Code:
    fallout@server:/tmp> tmpstring=`cat htmlfile`; for picfile in `cat piclist`; do tmpstring=`echo $tmpstring|sed -e "s/\[[^[]*\[.*$picfile[^]]*\]\]//g"`; done; echo $tmpstring
    versuchen, jedoch gibt es meines Wissens eine mir momentan nicht bekannte Größenbegrenzung von Variablen, wodurch ein großes htmlfile nicht in eine Variable zu packen ist.

    Gruß Daniel
     
Thema:

Datei mit LIste vergleichen

Die Seite wird geladen...

Datei mit LIste vergleichen - Ähnliche Themen

  1. perl script, das Dateien aus einer Liste löscht

    perl script, das Dateien aus einer Liste löscht: Hallo ich habe hier ein perl script, dass aus einer vorher generierten Liste, die so aus sieht 31edb809ff19486daf60e66cc3ab1a7d...
  2. Dateien eines Verzeichises + Inhalt in Liste

    Dateien eines Verzeichises + Inhalt in Liste: Hi, wie kann in der shell bestimmte dateien eines Verzeichnisses und deren Inhalt in eine "zweispaltige" liste scheiben (erste Spalte =...
  3. Dateiliste erstellen

    Dateiliste erstellen: Hallo Leute ich möchte gerne in ein Array eine Dateiliste speichern, unzwar sollen alle dateien reinkommen, die mit "CCC" im Dateinamen...
  4. amarok-Datei zur wiedergabeliste hinzufügen

    amarok-Datei zur wiedergabeliste hinzufügen: hi!! ich habe auf meinem Ubuntu 8.04 amarok als mediaplayer laufen. möchte nun, dass sich im normalen kontextmenü meiner audiodateien ein...
  5. Liste von Dateien eines Verzeichnisses abarbeiten

    Liste von Dateien eines Verzeichnisses abarbeiten: Hallo, stundenlang im Forum und sonstwo gesucht, aber immer noch kein Schritt weiter. Gestehe: bin blutiger Anfänger. Die Lage: ich habe ein...