CSV-Datei auslesen und Dateien zuordnen

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von Banana, 10.03.2008.

  1. Banana

    Banana Grünschnabel

    Dabei seit:
    18.02.2008
    Beiträge:
    8
    Zustimmungen:
    0
    Hallo Zusammen,

    Meine Aufgabe ist es aus einer CSV-Datei bestimmte Zonen auszulesen und jeder Zone ein xml-File (von tausenden von Files) zuzuordnen.

    Ich habe es schon soweit geschafft, dass ich die CSV-Datei auslesen kann und das Ergebnis in einer Text Datei abspeichere:


    PHP:

    awk 
    -F';' '{print $5}' blubb.csv grep '[^TimeBand]' sort uniq >Zone.txt;
    Ich schaffe es auch jeder Zone ganz viele xml-Files zuzuorden:

    PHP:

    sed 
    -'1p' Zone.txt |grep -$ *xml 
    Aber ich weiß leider nicht wie ich es anstellen soll, dass das Progamm aufhört, sobald es schon eine passende xml-Datei gefunden hat.

    Kann mir vielleicht jemand einen Tipp geben??

    Gruß Banana
     
  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 Gott_in_schwarz, 10.03.2008
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    zwei sachen:
    1. könntest du bitte beispiele posten. (csv beispiel mit der daraus resultierenden Zone.txt, beispiel output von dem grep befehl. ich hab n bissl schwierigkeiten mir das alles vorzustellen..)
    2. das hier:
      Code:
      grep '[^TimeBand]'
      macht eventuell nicht das, was du gerne willst.
      klick mich, ich bin ein link *:

    zum "grep-problem", schau dir mal den "-m" switch an, vielleicht hilft der ja
     
  4. Banana

    Banana Grünschnabel

    Dabei seit:
    18.02.2008
    Beiträge:
    8
    Zustimmungen:
    0
    Die Ausgabe von

    PHP:
    grep '[^TimeBand]'
    ist

    TB_P01-P
    TB_P02-O

    und dann habe ich noch jede menge xml-Files wo diese Zonen drinne vorkommen. Um die passenden Files zu jeder Zone zu bekommen verwende ich folgenden Befehl:

    PHP:

    sed 
    -'1p' Zone.txt |grep -$ *xml 

    Nur leider spuckt der mir dadurch jede Menge Files aus, aber ich hätte gerne das er mir nur ein raussucht
     
  5. #4 Gott_in_schwarz, 10.03.2008
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    könntest du bitte mal in worten sagen, was das hier machen soll?
    Code:
    sed -n '1p' Zone.txt |grep -l $ *xml 
    und das hier bitte auch:
    Code:
    grep '[^TimeBand]'
    eine beispiel-antwort auf das zweite-code schnippselchen wäre:
    ...

    und aus dem ersten code-schnippsel werde ich kein stück schlau, wäre nett wenn du das für mich ein wenig erläutern würdest. thx <3 (:

    ps: was ist an der von mir vorgeschlagenen "-m" option faul, dass du sie nicht benutzen willst?
     
  6. Banana

    Banana Grünschnabel

    Dabei seit:
    18.02.2008
    Beiträge:
    8
    Zustimmungen:
    0
    Ich habe gerade mal in der Info nach der Option -m geschaut.

    Hab habe folgendes gefunden:

    Wie kann ich das jetzt genau verwenden, hatte das folgendermaßen in meinen Befehl eingefügt:

    aber das funktioniert so leider nicht.

    Bekomme immer folgende Fehlermeldung ausgespuckt:

     
  7. #6 Gott_in_schwarz, 10.03.2008
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    naja, bei mir gehts. allerdings ist die m-option in verbindung mit der l-option doch nicht ganz so sinnvoll, wie ich mir das vorgestellt habe..
    aber du könntest ja auch einfach von da an weiter in head pipen.
    Code:
    grep -l "suchwort" *| head -1
    gibt dir nur die erste zeile zurück. könntest du btw trotzdem versuchen in worten zu sagen, was diese beiden befehle machen sollen?

    Code:
    sed -n '1p' Zone.txt |grep -l $ *xml
    (??)

    Code:
    grep '[^TimeBand]'
    ...
     
  8. Banana

    Banana Grünschnabel

    Dabei seit:
    18.02.2008
    Beiträge:
    8
    Zustimmungen:
    0
    Dies hier
    Soll aus der Zone.txt die erste Zeile auslesen (das wäre in diesem Fall TB_P01-P) und anschließend alle xml-Dateien nach diesem Suchmuster durchsuchen und nur der Dateiname soll ausgegeben werden.

    Zu deiner zweiten Frage:
    Deine Denkansatz war korrekt. TimeBand war nämlich die Überschrift und diese wollte ich nicht mit auslesen.
     
  9. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  10. #8 Gott_in_schwarz, 10.03.2008
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    habe ich befürchtet. wie kommst du auf die schreibweise mit dem dollarzeichen? das ist einmal der variablen-indikator der shell und einmal der "end of string" anchor von regex engines. und da es hier ja eine regex für grep darstellt, mätscht das ding dir da alles und jeden..
    und das mit der pipe wird so nicht funktionieren: wenn du einen befehl in grep pipest, "durchsucht" grep diesen text und verwendet ihn nicht als suchmuster. so sollte das gehen:
    Code:
    sed -n '1p' Zone.txt > pattern.file
    grep -f pattern.file *
    oder, wenn die patterns strings und keine regexes sind (oder für grep sein sollen), nimm auch noch den "-F" switch:
    Code:
    sed -n '1p' Zone.txt > pattern.file
    grep -Ff pattern.file *
    und das mit dem pipen nach head hab ich ja schon gesagt, hm. ach genau:
    Code:
    grep '[^EinWort]'
    so funktioniert das nicht, so schon:
    Code:
    grep -v 'EinWort'
    dazu darfst du auch gerne noch mal mein erstes post ansehen.
     
  11. #9 Wolfgang, 10.03.2008
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    @Banana
    Du hast jetzt bereits zwei Threads hier erstellt, und dabei weiß Niemand hier worüber wir eigentlich reden.
    Ist es denn wirklich so schwer, sich an die essentiellen Regeln zu halten?

    Ich bin es leid, ständig nach OS und Shell zu fragen.
    Diesen Hinweis habe ich nicht aus Spaß dort stehen.
    GNU grep verhält sich z.B. ganz anders als grep aus Solaris.
    C-Shell hat andere Syntax als Bash...
    u.s.w.

    Zum Thema.
    Um mit sed nur die erste Zeile zu lesen:
    Code:
    sed -e '1q' input
    
    zu den Regexp der Shell (ja von welcher denn?)
    Code:
    [^EGAL] -> ist eine Zeichenklasse der Buchstaben E,G,A,L egal in welcher Reihenfolge.
    AGEL würde also auch matchen genauso wie GELA. Die Sysv konforme Negation ist eigentlich !.
    Die Bash und ksh sowie GNU grep akzeptieren auch ^.
    
    Zu der Pipe wurde schon genug gesagt.
    
    Wolfgang
     
Thema:

CSV-Datei auslesen und Dateien zuordnen

Die Seite wird geladen...

CSV-Datei auslesen und Dateien zuordnen - Ähnliche Themen

  1. ca. 1200 PDF-Dateien auslesen und bestimmte Daten in eine CSV-Datei speichern

    ca. 1200 PDF-Dateien auslesen und bestimmte Daten in eine CSV-Datei speichern: Hallo Leute, heute brauche ich mal einen dringenden Rat von Euch. Ich habe hier etwas mehr als 1200 PDF-Dateien (Text), die jeweils ein...
  2. Per Shell Script CSV-Datei auslesen, anschliessend Dateien umbenennen

    Per Shell Script CSV-Datei auslesen, anschliessend Dateien umbenennen: Hallo Board, ich habe eine CSV datei, in der Name;Vorname;RECNUMBER;AUSBILENDE;Geburtsdatum;Geschlecht;Klasse...
  3. CSV-Datei mit einem Bash-Script erstellen

    CSV-Datei mit einem Bash-Script erstellen: Hallo, Ich stehe unerfreulicherweise vor einem kleinen Problem ^^ Ich soll mittels eines Bash-Scriptes eine CSV-Datei erstellen, die jeweils in...
  4. csv-Datei mit UNIX zurecht stutzen und Daten in xls-Datei laufend abspeichern

    csv-Datei mit UNIX zurecht stutzen und Daten in xls-Datei laufend abspeichern: Guten Abend, nach langem hin- und her und einigen (für mich als Laie) doch sehr zeitaufwändigen Versuchen wende ich mich vertrauensvoll an...
  5. 2 Zeilen aus einer txt auslesen

    2 Zeilen aus einer txt auslesen: Hallo Leute, ich habe eine Datei die immer aus zwei zusammenhängenden Zeilen besteht, als Beispiel: DE0006231004 # 15,04 Infineon DE0005785604...