PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : AWK 10 Zeichen ausgeben


Snake23
2005-09-29, 14:35:07
Hallo
Ich will mit awk etwas ausschneiden:

awk -F! '{printf "010"; printf $3; print $4}' file1 > file2

Wenn ich jetzt $3 ausschneide sind nur 3 zeichen drin... doch es soll in die datei file2 10 zeichen reinschrieben -> mit "spaces" auffüllen.
Und das selbe mit $4: Dort sind zum teil mehr als 50 drin doch es soll in die datei nur die ersten 50 oder sonst, wenn es weniger sind mit "spaces" auffüllen...
Wie kann ich das machen?
MfG

Harleckin
2005-09-29, 15:28:24
Mach dich vorab mit dem gawk (http://www.gnu.org/software/gawk/manual/html_node/) vertraut.
Unter den kommerzielen Unicses sind eher der nawk oder der Original awk verbreitet, vorbei sich einige Funktionen und deren Syntax unterscheiden.


Eine grundsätzliche Frage zum Thema: Warum willst du die Zeichenketten überhaupt in ihrer Länge ändern?!
Nimm einen ordentlichen Feldseperator wie ":" oder was auch immer. Sommit bekommst im Endeffekt eine CSV-Datei, die meinetwegen dann in Excel oder Openoffice importiert werden kann.

ThePsycho
2005-09-29, 17:26:15
Hallo,

also mit Spaces auffüllen:

printf("%10s",<String>) - falls es 10 Stellen breit sein soll
printf("%-10s",<String>) - gleiches, aber linksbündige Ausgabe

einen 50 Zeichen langen Substring: substr(<String>,1,50) - das kann man dann mit obigem printf kombinieren

Ich wüsste im übrigen nicht, wo hier ein Unterschied zwischen den verschiedenen awks wäre, zumindest das ur-awk und gawk sollten sich gleich verhalten (andere kenne ich nicht)

cyjoe
2005-10-01, 10:25:05
In nawk kann ich beispielsweise Umgebungsvariablen mit übergeben und dann z.B. etwas wie FS=$FS verwenden. Mit dem normalen awk geht das nicht - zumindest nicht unter Solaris.

ThePsycho
2005-10-01, 13:10:38
also unter HP-UX (ich glaube, da wird das ur-awk verwendet, auf jeden Fall kein gawk) geht das...

Snake23
2005-10-04, 17:03:16
printf("%10s",<String>)

Wenn der <string> 12 Zeichen länge wäre, wird er mit %10s ja nicht auf 10 reduziert. Warum nicht? Wie kann man das machen?

ThePsycho
2005-10-04, 20:09:29
richtig, das printf ändert nur die größe des vorgesehenen augabefelds, das ist vll unklar ausgedrückt

das schneiden geht dann mit "substr"...

das hättest aber auch erraten können :)