Uma ferramenta de shell para “tablify” dados de entrada

31

Há muito tempo, lembro de usar um comando que faz sua entrada em uma tabela bem formatada.

Por exemplo, para esta entrada,

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

A saída será semelhante a esta:

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

Gostaria de saber o nome dessa ferramenta.

    
por Alex B 30.07.2011 / 14:49

2 respostas

34

column -t

$ 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
    
por 30.07.2011 / 15:22
0

awk solução que lida com stdin

Como column não é POSIX, talvez seja:

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
)

Teste:

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

Comandos de teste:

mycolumn file
mycolumn <file
mycolumn - <file

Saída para todos:

      12   1234      1
12345678      1    123
    1234 123456 123456

Veja também:

por 06.09.2018 / 19:41

Tags