Una herramienta de shell para "tablificar" datos de entrada

33

Hace mucho tiempo recuerdo haber usado un comando que hace su entrada en una tabla bien formateada.

Por ejemplo, para esta entrada,

apple 1 100
orange 20 19
pineapple 1000 87
avocado 4 30

El resultado será similar a esto:

apple     1    100
orange    20   19
pineapple 1000 87
avocado   4    30

Me gustaría saber el nombre de esta herramienta.

Alex B
fuente

Respuestas:

35

Uso column -t. La columna es parte de util-linux .

$ column -t <<END
> apple 1 100
> orange 20 19
> pineapple 1000 87
> avocado 4 30
> END
apple      1     100
orange     20    19
pineapple  1000  87
avocado    4     30
Steven Pritchard
fuente
Me gusta la página de manual: " columnaste lists". Similar a "tablify".
Reid
0

awk solución que trata con stdin

Como columnno es POSIX, tal vez esto sea:

mycolumn() (
  file="${1:--}"
  if [ "$file" = - ]; then
    file="$(mktemp)"
    cat >"${file}"
  fi
  awk '
  FNR == 1 { if (NR == FNR) next }
  NR == FNR {
    for (i = 1; i <= NF; i++) {
      l = length($i)
      if (w[i] < l)
        w[i] = l
    }
    next
  }
  {
    for (i = 1; i <= NF; i++)
      printf "%*s", w[i] + (i > 1 ? 1 : 0), $i
    print ""
  }
  ' "$file" "$file"
  if [ "$file" = - ]; then
    rm "$file"
  fi
)

Prueba:

printf '12 1234 1
12345678 1 123
1234 123456 123456
' > file

Comandos de prueba:

mycolumn file
mycolumn <file
mycolumn - <file

Salida para todos:

      12   1234      1
12345678      1    123
    1234 123456 123456

Ver también:

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
fuente
0

Para archivos relativamente pequeños, (donde la longitud en bytes es menor que getconf ARG_MAX), y los tamaños de entrada son más o menos conocidos (digamos que ningún nombre de fruta tiene más de 18 letras de largo), printfpuede ser útil, aquí hay un bashejemplo:

 printf '%-20s %5s %5s\n' $(<file.txt)

Salida:

apple                    1   100
orange                  20    19
pineapple             1000    87
avocado                  4    30

Observe cómo los números están justificados correctamente .

agc
fuente