Anhang B Lösungen{ print $2, $1 }print kan mehrere Argumente haben, die mit Kommas getrennt werden. Bei der Ausgabe wird zwischen den Argumenten ein Leerzeichen geschrieben. { print NR, $0 }
NR%2==0 für Zeilen mit geraden Nummern, NR%2==1 für ungerade. {l++; w += NF; c += length + 1}; END {print l, w, c};Die 1 muss zur Länge addiert werden, da wc das Zeichen \n am Ende der Zeile mitberücksichtigt. $1=="mult" { n += $2*$3 }; END { print n } /^[ \t]/ { print ""; print } $1 != x { print; x = $1 } { printf "%-8s%8d%8.2f%8.2f%8.2f", $1, $2, $3, $4, $5 } { x1 = substr ($0,1,8); x2 = substr ($0,9,8); x3 = substr ($0,17,8); x4 = substr ($0,25,8); x5 = substr ($0,33,8); print x1, x2, x3, x4, x5; } $0 ~ "^[0-9]" { gsub("ä","Ä"); gsub("ö","Ö"); gsub("ü","Ü"); gsub("ß","SS"); print toupper ($0); } $0 !~ "^[0-9]"
{ for (i=NF;i>0;i--) printf "%s " $i; print "" } Die Zeile verkehrtherum: { for (i=length;i>0;i--) printf "%s" substring ($0,i,1); print ""; } Das abschließende print "" bewirkt nur einen Zeilenumbruch. BEGIN { while (getline < "id.dat" == 1) a[$1] = 0 } { if ($1=="SOLID") getline; else print; }Auch wenn es nicht so aussieht, werden hier tatsächlich zwei Zeilen nicht geschrieben: getline liest die nächste Zeile ein, mit der aber nichts gemacht wird. Erst die übernächste Zeile wird wieder auf »SOLID« überprüft. Eine alternative Lösung wäre: /^SOLID/ { getline; next; } { print; } { gsub (/\<[^>]*\>/,""); print }
|
|