Zeile 1, 6 und 7 einer Textdatei auslesen
Ich will Zeile 1, 6 und 7 einer Textdatei auslesen und je einer Variablen zuordnen. Ich bin nur zu einer so peinlichen Lösung gekommen: i=1; for i in 1; do read Nr; read a;read a;read a;read a; read gebDat; read name; echo $Nr;echo $gebDat;echo $name; i=2; done < text.txt Die Scheife wird nur einmal durchlaufen. Ich habe es sonst nicht hinbekommen hintereinander die 7 Zeilen einzulesen ... Es geht doch bestimmt einfacher als die Schleife, aber wie? Die Textdatei text.txt sieht z.B. so aus: 2000 w x y z 10.04.1968 Max Mustermann x y z danke schon mal Ekkard
Hallo, Am Fri, 30 Jul 2004, Ekkard Gerlach schrieb:
Ich will Zeile 1, 6 und 7 einer Textdatei auslesen und je einer Variablen zuordnen.
eval `sed -n '1{s/^/eins="/;s/$/"/;p;}; 6{s/^/sechs="/;s/$/"/;p;}; 7{s/^/sieben="/;s/$/"/;p;}'`; echo "'$eins', '$sechs', '$sieben'"; Vorteil: funktioniert mit beliebigen bekannten Zeilennummern (und anderen Adressen), siehe man sed. HTH, -dnh -- I have wondered what would be outside the universe. Half a step after "a different kind of nothing", I stopped. -- M. Wiltink
David Haller wrote:
Am Fri, 30 Jul 2004, Ekkard Gerlach schrieb:
Ich will Zeile 1, 6 und 7 einer Textdatei auslesen und je einer Variablen zuordnen.
eval `sed -n '1{s/^/eins="/;s/$/"/;p;}; 6{s/^/sechs="/;s/$/"/;p;}; 7{s/^/sieben="/;s/$/"/;p;}'`; echo "'$eins', '$sechs', '$sieben'";
Vorteil: funktioniert mit beliebigen bekannten Zeilennummern (und anderen Adressen), siehe man sed.
Nicht so elegant, aber vielleicht einfacher zu verstehen: var1="`awk 'NR==1' datei.txt`" var2="`awk 'NR==6' datei.txt`" var3="`awk 'NR==7' datei.txt`" echo "$var1" echo "$var2" echo "$var3" CU, Th.
Hallo, Am Sat, 31 Jul 2004, Thomas Hertweck schrieb:
David Haller wrote:
Am Fri, 30 Jul 2004, Ekkard Gerlach schrieb:
Ich will Zeile 1, 6 und 7 einer Textdatei auslesen und je einer Variablen zuordnen.
eval `sed -n '1{s/^/eins="/;s/$/"/;p;}; 6{s/^/sechs="/;s/$/"/;p;}; 7{s/^/sieben="/;s/$/"/;p;}'`; echo "'$eins', '$sechs', '$sieben'";
Vorteil: funktioniert mit beliebigen bekannten Zeilennummern (und anderen Adressen), siehe man sed.
Nicht so elegant, aber vielleicht einfacher zu verstehen:
var1="`awk 'NR==1' datei.txt`" var2="`awk 'NR==6' datei.txt`" var3="`awk 'NR==7' datei.txt`" echo "$var1" echo "$var2" echo "$var3"
Das geht natuerlich auch mit 'sed' so. In einer Schleife will man aber awk (oder sed) nicht mehrfach aufrufen. var1="`sed -n '1p' datei.txt`" var2="`sed -n '6p' datei.txt`" var3="`sed -n '7p' datei.txt`" echo "${var1}, ${var2}, ${var3}" -dnh -- "DOS=HIGH ...I knew it was on something!" (UNIX user, while reading C:\CONFIG.SYS)
David Haller wrote: [Saturday 31 July 2004 00:03]
Am Fri, 30 Jul 2004, Ekkard Gerlach schrieb:
Ich will Zeile 1, 6 und 7 einer Textdatei auslesen und je einer Variablen zuordnen.
eval `sed -n '1{s/^/eins="/;s/$/"/;p;}; 6{s/^/sechs="/;s/$/"/;p;}; 7{s/^/sieben="/;s/$/"/;p;}'`; echo "'$eins', '$sechs', '$sieben'";
Vorteil: funktioniert mit beliebigen bekannten Zeilennummern (und anderen Adressen), siehe man sed.
Nachteil: Kunden mit eigenwilligen Namen - wie wäre es mit: Max Musterman";rm -rf "/ Kinder, probiert das nicht bei euch zu Hause... Thomas.
On Friday July 30 2004 14:08, Ekkard Gerlach wrote:
Ich will Zeile 1, 6 und 7 einer Textdatei auslesen und je einer Variablen zuordnen. Ich bin nur zu einer so peinlichen Hallo Ekkard,
2 alternative Loesungen fuer die Shell: ##### exec 4<text.txt read -u4 Nr for i in 2 3 4 5; do read -u4; done read -u4 gebDat read -u4 name echo $Nr; echo $gebDat; echo $name; ##### ##### i=0 while read line; do ((i=i+1)) [ $i -eq 1 ] && Nr=$line [ $i -eq 6 ] && gebDat=$line [ $i -eq 7 ] && name=$line [ $i -eq 8 ] && break done < text.txt echo $Nr; echo $gebDat; echo $name; ##### Geht natuerlich auch mit Perl etc., je nach Anforderungen. HTH Michael
participants (5)
-
David Haller
-
Ekkard Gerlach
-
Michael Siefritz
-
Thomas Hertweck
-
Thomas Hofer