Mit Grep nach Variabler suchen

fbalz

fbalz

Aktives Mitglied
Thread Starter
Dabei seit
18.02.2005
Beiträge
1.032
Reaktionspunkte
55
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?
 
beide deiner suchen sollten eigentlich ergebnisse liefern.
kontrolliere mal ohne umleitung in datei:
Code:
grep "${PatIDID}" $Pfad/SpResultExt.csv
 
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.
 
in die variable wird kein LF angehängt, stichwort IFS.
bei mir geht's genauso wie oben beschrieben (10.11).
 
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.
 
du kannst vor allem mit read das gleiche problem haben (-d '' etc.). :p
 
... 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.
 
... IFS war dabei auf den Tab-char gesetzt.
 
so etwas sollte dann bei dem befehl aus #2 (umleitung weglassen) auffallen.
 
....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.

beide deiner suchen sollten eigentlich ergebnisse liefern.
kontrolliere mal ohne umleitung in datei:
Code:
grep "${PatIDID}" $Pfad/SpResultExt.csv

Diese Suche ergibt nichts.

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

grep ID5268 $Pfad/SpResultExt.csv

geht.
 
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.
 
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.
 
kommen die dateien aus windows?
 
Zurück
Oben Unten