Re: Wie eine Datei Zeile für Zeile auslesen ?
Am Montag, 16. Februar 2004 23:45 schrieb Reinhold Plew:
> Michelle Konzack schrieb:
[...]
> > wie kann man in einem Bash-Script eine Datei Zeile für Zeile
> > von der ersten bis zur lezten auslesen ?
>
> versuch es mal mit awk, ist echt praktisch:
>
> #script
> FILE=<inputfile>
> C_FILE=<outputfile>
>
> cat ${FILE} | \
Useless use of cat award ;-) Das kannst Du dem awk gleich als
Argument mitgeben.
> awk -v CFILE=$C_FILE ' \
Die Ausgabe des awk kannst Du auch gleich hinten an den awk hängen.
> BEGIN {
> FS="[:\t@]" # Falls Du die Felder der Zeile trennen möchtest
Dafür gibt es eine awk-Option.
> printf("echo 'Script gestartet...'") > CFILE
Huch? Was macht der echo innerhalb des printf? Soll die Ausgabe ein
Shell-Scipt werden?
> }
> {
> printf("%s", $0) >> C_FILE # Ausgabe der gesamten
> Zeile printf("%s - %s", $1, $3) >> C_FILE # Ausgabe Feld 1 + 3 }
> END {
> printf("echo Script beendet...") >> CFILE
> }
> #cript Ende
> awk -v CFILE=$C_FILE ' \
Die Ausgabe des awk kannst Du auch gleich hinten an den awk hängen.
> BEGIN {
> FS="[:\t@]" # Falls Du die Felder der Zeile trennen möchtest
Dafür gibt es eine awk-Option.
> printf("echo 'Script gestartet...'") > CFILE
Huch? Was macht der echo innerhalb des printf? Soll die Ausgabe ein
Shell-Scipt werden? Dann sollte man aber noch ein \n einbauen, der
printf macht das nämlich nicht automatisch.
> }
> {
> printf("%s", $0) >> C_FILE # Ausgabe der gesamten
> Zeile printf("%s - %s", $1, $3) >> C_FILE # Ausgabe Feld 1 + 3 }
> END {
> printf("echo Script beendet...") >> CFILE
> }
Hier fehlt noch mindestens der ', der das awk beendet:
} '
Meine Version:
FILE=<inputfile>
C_FILE=<outputfile>
awk -F "[:\t@]" '\
BEGIN {
printf "echo 'Script gestartet...'\n";
}
{
printf "%s\n", $0; # alternativ: print $0;
printf "%s - %s\n", $1, $3;
END {
printf "echo Script beendet...\n";
} ' $FILE >$C_FILE
Jan
Reply to: