GNU/Linux >> Tutoriales Linux >  >> Linux

Lum – Awk – ¿Formato dinámico de columnas separadas por tabuladores?

Tengo un archivo con columnas de longitud dinámica (cuatro) separadas con tabulaciones (una columna puede tener espacios)

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

¿Me gustaría formatearlo dinámicamente con printf en awk? Puedo formatearlo con ajustes fijos:

$ 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

Respuesta aceptada:

en bash, usando 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 usa 2 espacios para separar las columnas

Con awk, escribiría

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

Donde estoy procesando el archivo dos veces:primero para encontrar el ancho máximo para cada columna, luego nuevamente para reformatear el archivo. Uso una pestaña para separar las columnas en la salida.

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

Linux
  1. Una guía para principiantes de Gawk

  2. Variable externa en Awk?

  3. Lum - ¿Combinar columnas de dos archivos separados?

  4. Trabajar con columnas:¿Awk y Sed?

  5. 4 Ejemplos de sentencias If de Awk (if, if else, if else if, :? )

Comando AWK en Linux con ejemplos

Comando Awk en Linux

Comando AWK en Linux/Unix

¿Cómo cortar las primeras n y las últimas n columnas?

Formato de archivo de volcado del núcleo

Usando grep vs awk