Ich verstehe, wie man die printf-Funktion von awk verwendet, möchte aber nicht jedes Feld angeben.
Angenommen, dies ist meine Datei:
c1|c2|c3|c4|c5
c6|c7|c8|c9|c10
c11|c12|c13|c14|c15
Ich möchte es so formatieren, dass das erste Feld jedes Datensatzes die Breite von c11 hat - die längste Zelle im ersten Feld:
c1 |c2|c3|c4|c5
c6 |c7|c8|c9|c10
c11|c12|c13|c14|c15
Ich verstehe, dass ich angeben könnte:
awk -F"|" '{printf "%-3s%s%s%s%s\n", $1, $2, $3, $4, $5}' file > newfile
Nehmen wir an, ich weiß, wie breit die erste Spalte sein soll, aber ich weiß NICHT, wie viele Felder sich in der Datei befinden. Grundsätzlich möchte ich so etwas machen wie:
... '{printf "%-3s|", $1}'
... und drucken Sie dann die restlichen Felder im Originalformat aus.
sed 's/|/'' '' '' |/;s/\(...\) */\1/'
(Hier werden zusätzliche Anführungszeichen hinzugefügt, um diese drei Leerzeichen einzufügen, wenn die SE-Kommentare zusammenhängende Leerzeichen in ein einziges zusammenfassen.)