Hallo zusammen,
Ich versuche aus einem Bash Script heraus eine Tabelle zu erstellen und befasse mich damit schon eine Ganze weile. Ich habe auch Lösungen gefunden, die aber alle immer nur zum Teil erfolgreich waren. Nun Habe ich eine Lösung im I-Net gefunden die so glaube ich sehr erfolgversprechend ist. -1-
Ich verstehe das Script nicht zu 100 Prozent. Ich hoffe, dass mir hier jemand weiterhelfen kann. Ich möchte den Code mal etwas zerlegen und beschreiben was ich glaube verstanden zu haben und was nicht.
1 | no=`awk -F" " -v l=\`awk 'END{print NR}' sss.dat1\` ' |
Hier wird im ersten Teil der Gesamte Inhalt der Datei "sss.dat1" der Variablen "no" Durch den Seperator " " getrennt zugewiesen und im zweiten Teil wird in der Variable "l" die Anzahl der Zeilen hinterlegt.
1 | {A[NR]=length($1)" "length($2)" "length($3)" "length($4)" "length($5)} |
Hier wird im Array "A" die Länge der Einzelteile für jede Zeile gespeichert.
1 2 3 4 5 6 7 8 | END{for(i=0;i<l;++i) {split(A[i],B," "); {if(B[1]>max1){max1=B[1]}} {if(B[2]>max2){max2=B[2]}} {if(B[3]>max3){max3=B[3]}} {if(B[4]>max4){max4=B[4]}} {if(B[5]>max5){max5=B[5]}} }{print max1" "max2" "max3" "max4" "max5}}' sss.dat1` |
Diesen Teil verstehe ich nur zum kleinen Teil, hier werden irgend welche Maximal Werte geprüft / gesetzt ?!?
1 | awk -F" " -v var="$no" '{split(var,A," ")}{printf "%-"A[1]"s %-"A[2]"s %-"A[3]"s %-"A[4]"s %-"A[5]"s\n",$1,$2,$3,$4,$5}' sss.dat1 |
Hier wird die Ausgabe aufbereitet, aber wie genau ist mir auch nicht ganz klar.
Hier nun meine Fragen:
1. Ist es möglich die Daten anstatt aus einer Datei auch aus einem Bash-Array zu lesen und dann zu verarbeiten?
2. Wie bekomme ich eine Spalten Überschrift dort mit eingesetzt die dann auch mit der gleichen Spaltenbreite gesetzt wird?
Zum besseren Verständnis hier nochmal das ganze Script.
1 2 3 4 5 6 7 8 9 10 11 12 | #!/bin/bash no=`awk -F" " -v l=\`awk 'END{print NR}' sss.dat1\` ' {A[NR]=length($1)" "length($2)" "length($3)" "length($4)" "length($5)} END{for(i=0;i<l;++i) {split(A[i],B," "); {if(B[1]>max1){max1=B[1]}} {if(B[2]>max2){max2=B[2]}} {if(B[3]>max3){max3=B[3]}} {if(B[4]>max4){max4=B[4]}} {if(B[5]>max5){max5=B[5]}} }{print max1" "max2" "max3" "max4" "max5}}' sss.dat1` awk -F" " -v var="$no" '{split(var,A," ")}{printf "%-"A[1]"s %-"A[2]"s %-"A[3]"s %-"A[4]"s %-"A[5]"s\n",$1,$2,$3,$4,$5}' sss.dat1 |
Für unterstützung wäre ich Dankbar!