|
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 }
|
|