GNU/Linux >> Tutoriels Linux >  >> Linux

Lum - Awk - Formater dynamiquement des colonnes séparées par des tabulations ?

J'ai un fichier avec des colonnes de longueur dynamique (quatre) séparées par des tabulations (une colonne peut avoir des espaces)

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

Je voudrais le formater dynamiquement avec printf en awk ? Je peux le formater avec des ajustements fixes :

$ 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

Réponse acceptée :

en bash, en utilisant 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 utilise 2 espaces pour séparer les colonnes

Avec awk, j'écrirais

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

Où je traite le fichier deux fois :d'abord pour trouver les largeurs maximales pour chaque colonne, puis à nouveau pour reformater le fichier. J'utilise un onglet pour séparer les colonnes dans la sortie.

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

Linux
  1. Variable externe dans Awk ?

  2. Lum - Fusionner des colonnes à partir de deux fichiers distincts ?

  3. AWK contre NAWK contre GAWK

  4. Exemples de commandes pinky sous Linux

  5. Comment couper les premières n et dernières n colonnes ?

Commande AWK sous Linux avec des exemples

Commande Awk sous Linux

Commande AWK sous Linux/Unix

4 Exemples d'instructions Awk If ( if, if else, if else if, :? )

Utiliser awk pour imprimer toutes les colonnes de la nième à la dernière

Utiliser grep contre awk