Hannes Vogelmann schrieb:
ehemm,... join natürlich, aber meine Gedanken waren wohl gerade wo anders ;-).
Eine Frage habe ich jetzt aber doch noch: mit printf macht awk keinen Zeilenumbruch und mit print funktioniert der Ausdruck "%-40s : %20.10f" nicht. Was der allerdings genau macht ist mir auch nicht klar, das 10f steht wohl für 10 Nachkomastellen wenn ich nicht irre aber das andere?
Sorry, hab ich übersehen. häng einfach einen Zeilenumbruch dran: "%-40s : %20.10f\n" man awk und man bzw info printf sagt Dir mehr dazu. printf ist was andres als print. print gibt einfach nur das Argument bzw $0 mit einem Zeilenumbruch aus. printf gibt einen formatierten String aus. "%-40s : %20.10f\n" bedeutet: String 40 Zeichen linksbündig, Space : Space, Fliesskommazahl 20 Zeichen lang, 10 Nachkommastellen (rechtsbündig) und ein newline Zur Demo mal ein Script: ----8<---- #!/bin/bash cat <<EJ1 >/tmp/j1 l1 100.56 l2 220.34 l3 3111.44 EJ1 cat <<EJ2 >/tmp/j2 l1 4234.67890 l2 54.7823 l3 6.00888 EJ2 join /tmp/j1 /tmp/j2 | \ awk 'BEGIN { fmt="%-20s %15.8f %15.8f : %20.8f\n"; } { erg=$2*$3;printf(fmt,$1,$2,$3,erg); sj1+=$2; sj2+=$3; } END { printf( "--------------------------------------------" ); print "--------------------------------------------" printf(fmt,"Summen",sj1,sj2,sj1*sj2); }' ----8<---- Wichtig ist hierbei, dass Fliesskommazahlen den Punkt als Dezimaltrenner haben. Mit Komma mag awk nicht rechnen, kann sein, es ist möglich via locale etwas anderes vorzugeben. Damit hab ich mich aber noch nie befasst ;) HTH Gruss bernd