Mit Grep nach Variabler suchen

Diskutiere das Thema Mit Grep nach Variabler suchen im Forum Mac OS - Unix & Terminal.

  1. fbalz

    fbalz Thread Starter Mitglied

    Beiträge:
    1.032
    Zustimmungen:
    55
    Mitglied seit:
    18.02.2005
    Hallo,

    ich habe eine csv Datei in der ich eine Zeile auslesen will, die mit einer bestimmten Zeichenfolge beginnt, die ich vorher aus einer anderen Datei ausgelesen habe und in eine Variable geschrieben habe.

    PatID=$(cat $Pfad/PatID.txt)

    echo 'ID'$PatID > $Pfad/PatIDID.txt

    PatIDID=$(cat $Pfad/PatIDID.txt)

    echo $PatIDID


    echo liefert was ich erwarte (z.B. ID5268), die folgende Suche jedoch nicht.

    grep ${PatIDID}$ $Pfad/SpResultExt.csv > $Pfad/spID.txt
    oder
    grep $PatIDID $Pfad/SpResultExt.csv > $Pfad/spID.txt

    Ich habe schon diverse Schreibweisen der Variablen versucht, es kommt jedoch nie ein Ergebnis.

    Suche ich jedoch so, ist die Suche erfolgreich.

    grep ID5268 $Pfad/SpotResultExt.csv > $Pfad/spID.txt

    Wie muß ich die Variable Schreiben?
     
  2. Olivetti

    Olivetti Mitglied

    Beiträge:
    10.723
    Zustimmungen:
    3.323
    Mitglied seit:
    09.12.2005
    beide deiner suchen sollten eigentlich ergebnisse liefern.
    kontrolliere mal ohne umleitung in datei:
    Code:
    grep "${PatIDID}" $Pfad/SpResultExt.csv
    
     
  3. lisanet

    lisanet Mitglied

    Beiträge:
    1.291
    Zustimmungen:
    709
    Mitglied seit:
    05.12.2006
    hhmmm, ich habe es jetzt nicht getestet, da ich gerade nur am iPhone tippe, aber soweit ich sehe, kriegst du durch das “Auslesen” mit cat ein LF am Ende der Variablen mit dazu. Und so sucht grep eben nach ID1234\n und nicht nach ID1234

    BTW, mir erschließt sich auch nicht, warum du die Variable erst mit cat ausgibst, dann wieder in eine Datei schreibst und wieder ausliest nur im noch einen String dran zu hängen. Und probiere das alles mal mit read anstelle von cat.
     
  4. Olivetti

    Olivetti Mitglied

    Beiträge:
    10.723
    Zustimmungen:
    3.323
    Mitglied seit:
    09.12.2005
    in die variable wird kein LF angehängt, stichwort IFS.
    bei mir geht's genauso wie oben beschrieben (10.11).
     
  5. lisanet

    lisanet Mitglied

    Beiträge:
    1.291
    Zustimmungen:
    709
    Mitglied seit:
    05.12.2006
    ok stimmt.

    Aber irgendwie erinnere ich mich, dass ich auch mal das Problem hatte und das was mit einem LF zu tun hatte. Ich kriege es nur nicht mehr ganz zusammen. Das könnte was mit IFS gewesen sein. Ich muss mal etwas herum testen.
     
  6. Olivetti

    Olivetti Mitglied

    Beiträge:
    10.723
    Zustimmungen:
    3.323
    Mitglied seit:
    09.12.2005
    du kannst vor allem mit read das gleiche problem haben (-d '' etc.). :p
     
  7. lisanet

    lisanet Mitglied

    Beiträge:
    1.291
    Zustimmungen:
    709
    Mitglied seit:
    05.12.2006
    ... ich hab's bei mir gefunden. Ich hatte mal das Problem, dass bei dem "cat ..." ein paar führende Leerzeichen mit ausgegeben wurden, die durch die Anführungszeichen in der Variablen bei grep erhalten blieben, aber im zu durchsuchenden Text nicht enthalten waren.
    Vielleicht ist das ja auch beim TE passiert als er die ID aus der csv-Datei eingelesen hat.
     
  8. lisanet

    lisanet Mitglied

    Beiträge:
    1.291
    Zustimmungen:
    709
    Mitglied seit:
    05.12.2006
    ... IFS war dabei auf den Tab-char gesetzt.
     
  9. Olivetti

    Olivetti Mitglied

    Beiträge:
    10.723
    Zustimmungen:
    3.323
    Mitglied seit:
    09.12.2005
    so etwas sollte dann bei dem befehl aus #2 (umleitung weglassen) auffallen.
     
  10. fbalz

    fbalz Thread Starter Mitglied

    Beiträge:
    1.032
    Zustimmungen:
    55
    Mitglied seit:
    18.02.2005
    ....ist mein erster Ausflug ins Terminal und sicher ist noch viel Optimierung möglich. Die vielen Variablen werden am Ende wieder in eine Datei geschrieben. Damit ich kontrollieren kann, ob die einzelnen Schritte funktionieren, lasse ich sie zwischendurch noch in Dateien schreiben. Die ID, die ich auslese ist nur ein numerischer Wert. Da ich aber nach ID1234 suchen möchte und nicht nur nach 1234, füge ich noch das ID hinzu.

    Diese Suche ergibt nichts.

    Habe dann wieder direkt suchen lassen und bekomme das erhoffte Ergebnis.

    grep ID5268 $Pfad/SpResultExt.csv

    geht.
     
  11. fbalz

    fbalz Thread Starter Mitglied

    Beiträge:
    1.032
    Zustimmungen:
    55
    Mitglied seit:
    18.02.2005
    Offensichtlich ist es ein Problem mit zusätzlichen Zeichen in der Variablen, denn wenn ich
    PatID=$(cat $Pfad/s2e/3000.txt | cut -c8-11)
    mache und nur Zeichen 8-11 als Suche für Grep verwende geht es.
    Kann ich irgendwo sehen, welche Zeichen nach dem 11 kommen oder sind es \n (LF)?
    Könnte ich diese auch per cut entfernen, wenn ich nicht weiss, wie viele Zeichen nach dem 8. kommen?

    Frank.
     
  12. fbalz

    fbalz Thread Starter Mitglied

    Beiträge:
    1.032
    Zustimmungen:
    55
    Mitglied seit:
    18.02.2005
    Habe mir mit od die Variable anzeigen lassen, heraus kommt 5268\r
    Mit tr -d '\r' < $Pfad/s2e/3000.txt > $Pfad/s2v/3000a.txt trenne ich das \r ab und übergebe nun die 3000a.txt ab, dem 8. Zeichen, an eine Variable
    PatID=$(cat $Pfad/s2v/3000a.txt | cut -c8)

    Frank.
     
  13. Olivetti

    Olivetti Mitglied

    Beiträge:
    10.723
    Zustimmungen:
    3.323
    Mitglied seit:
    09.12.2005
    kommen die dateien aus windows?
     
Die Seite wird geladen...
  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite weitersurfst, akzeptierst du unseren Einsatz von Cookies. Akzeptieren Weitere Informationen...