Ein Shell-Tool zum „Tablifizieren“ von Eingabedaten


33

Vor langer Zeit erinnere ich mich, einen Befehl verwendet zu haben, der seine Eingabe in eine schön formatierte Tabelle macht.

Zum Beispiel für diese Eingabe,

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

Die Ausgabe wird ungefähr so ​​aussehen:

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

Ich möchte den Namen dieses Tools kennen.

Antworten:


35

Verwenden Sie column -t. column ist Teil von 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

Ich mag die Manpage: " Spaltenlisten ". Ähnlich wie "tablify".
Reid

0

awk lösung, die sich mit stdin befasst

Da columnes sich nicht um POSIX handelt, ist dies möglicherweise:

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
)

Prüfung:

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

Testbefehle:

mycolumn file
mycolumn <file
mycolumn - <file

Ausgabe für alle:

      12   1234      1
12345678      1    123
    1234 123456 123456

Siehe auch:


0

Für relativ kleine Dateien (wobei die Länge in Bytes geringer ist als getconf ARG_MAX) und die Eingabegrößen mehr oder weniger bekannt sind (sagen wir, kein Fruchtname ist länger als 18 Buchstaben), printfkann Folgendes nützlich sein bash:

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

Ausgabe:

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

Beachten Sie, wie die Zahlen richtig ausgerichtet sind .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.