GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Lum – Awk – Tabulatorgetrennte Spalten dynamisch formatieren?

Ich habe eine Datei mit Spalten mit dynamischer Länge (vier), die durch Tabulatoren getrennt sind (eine Spalte kann Leerzeichen enthalten)

COL1    COL2 COL2 COL2  COL3 COL3       COL4
COL1    COL2 COL2       COL3    COL4 COL4
COL1 COL1       COL2 COL2       COL3    COL4 COL4 COL4

Ich möchte es dynamisch mit printf in awk formatieren? Ich kann es mit festen Anpassungen formatieren:

$ awk 'BEGIN {FS="t"}; {printf "%-10s %-10s %-15s %-15sn", $1,$3,$4,$2}' test
COL1       COL3 COL3  COL4            COL2 COL2 COL2
COL1       COL3       COL4 COL4       COL2 COL2
COL1 COL1  COL3       COL4 COL4 COL4  COL2 COL2

Akzeptierte Antwort:

in bash, mit column

$ column -s $'t' -t file.tsv
col1       col2 col2 col2  col3 col3  col4
col1       col2 col2       col3       col4 col4
col1 col1  col2 col2       col3       col4 col4 col4

column -t verwendet 2 Leerzeichen, um die Spalten zu trennen

Mit awk würde ich schreiben

awk -F 't' -v cols=4 '
    NR == FNR {
        for (i=1; i<=cols; i++) 
            if (NR == 1 || length($i) > w[i]) 
                w[i] = length($i)
        next
    }
    {
        for (i=1; i<=cols; i++) 
            printf "%-*s%s", w[i], $i, (i == cols ? ORS : FS) 
    }
' file.tsv file.tsv

Wo ich die Datei zweimal verarbeite:zuerst, um die maximale Breite für jede Spalte zu finden, dann erneut, um die Datei neu zu formatieren. Ich verwende einen Tabulator, um die Spalten in der Ausgabe zu trennen.

col1            col2 col2 col2  col3 col3       col4
col1            col2 col2       col3            col4 col4
col1 col1       col2 col2       col3            col4 col4 col4

Linux
  1. Eine Anleitung für Anfänger zum gawk

  2. Wie verwendet man Awk, um nur Zeilen mit 5 Spalten zu drucken?

  3. Arbeiten mit Spalten – Awk und Sed?

  4. Redundanz aus Ausgabespalten entfernen?

  5. 4 Beispiele für Awk-If-Anweisungen ( if, if else, if else if, :? )

Verwenden Sie awk, um die Buchstabenhäufigkeit zu berechnen

AWK-Befehl in Linux mit Beispielen

Awk-Befehl unter Linux

AWK-Befehl unter Linux/Unix

AWK gegen NAWK gegen GAWK

Core-Dump-Dateiformat