PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit 'for' beim auslesen von Dateien (Bash-Script)



leukozyt
28-10-2003, 00:22
Hi Leute,

wenn ich in mein Script folgende Zeile eintrage,
werden die auszulesenden Zeilen,
nur bis zum ersten Leerzeichen,
in der For-Anweisung wiedergegeben.

for LINE in `cat /any/file.txt`

Hier ein Beispiel meines Problems:

echo 'Dies ist ein schoener Tag.' > /any/file.txt
echo 'Schon wieder ein schoener Tag.' >> /any/file.txt

for LINE in `cat /any/file.txt`
do
case "$LINE" in
"Schon wieder ein schoener Tag.")
echo "$LINE"
;;
"Dies ist ein schoener Tag.")
echo "$LINE"
;;
*)
echo "Fehler im Kommando."
;;
esac
done
exit 0

Die Lösung die ich nutzte ist folgende:

for LINE1 in "$(cat /any/file.txt | tr ' ' '_')"
do
case "$LINE1" in
"Schon_wieder_ein_schoener_Tag.")
LINE2="$(echo $LINE1 | tr '_' ' ')"
echo "$LINE2"
;;
"Dies_ist_ein_schoener_Tag.")
LINE2="$(echo $LINE1 | tr '_' ' ')"
echo "$LINE2"
...


Gibt es noch eine bessere Möglichkeit als die die ich nutze ?

MfG
Leukozyt

Hans-Georg Normann
28-10-2003, 17:46
ich weiß ja nicht was du genau machen möchtest. Aber schon mal an awk gedacht. Da gibt's auch ein getline.

Scriptsprachen wie Python sind natürlich auch geeignet.
Hans

leukozyt
28-10-2003, 20:31
Das mag ja sein, aber ich möchte als nächstes C und dann C++ lernen.
Pyton, Perl, Awk, und oder 'Hau mich tot', will ich jetzt nicht auch noch lernen.

MfG
Leukozyt

Hans-Georg Normann
28-10-2003, 21:41
tschuldigung, stand ja nicht in deinem Posting. Dann kannst du das ja gleich mit einem C Prog machen.

Hans

leukozyt
29-10-2003, 11:39
Werde ich machen,
ist wohl immer besser ewas C zu können.

MfG
Leukozyt

fork
31-10-2003, 13:07
Warum nicht gleich C++, bzw. warum nicht gleich Java? :)

buffer_7
04-11-2003, 07:23
Mahlzeit,

also wenn ich das richtig verstanden habe, und es ein shellskript sein soll,
dann setz doch einfach den Trenner "IFS" nur auf Zeilenende. Dann sollte
Dein Code genau so funktionieren.

Gruß
Ihr und Euer

buffer_7

leukozyt
05-11-2003, 18:11
setz doch einfach den Trenner "IFS" nur auf Zeilenende.

Wie mache ich das ?

jean_luc_picard
20-12-2003, 16:47
im Skript einfach zu Anfang:

IFS="
"

:) ... man kann auch mehrere Trenner angeben, z.B.

IFS="; "

somit wären ";" und " " Feldtrenner...

Gruss Picard