Một công cụ shell để dữ liệu đầu vào của tablify


33

Cách đây rất lâu, tôi nhớ sử dụng một lệnh làm cho đầu vào của nó thành một bảng được định dạng độc đáo.

Ví dụ, đối với đầu vào này,

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

Đầu ra sẽ tương tự như sau:

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

Tôi muốn biết tên của công cụ này.

Câu trả lời:


35

Sử dụng column -t. cột là một phần của linux-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

Tôi như xem man page: " columnate danh sách". Tương tự như "tablify".
Reid

0

awk giải pháp liên quan đến stdin

columnkhông phải là POSIX, nên có thể đây là:

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
)

Kiểm tra:

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

Các lệnh kiểm tra:

mycolumn file
mycolumn <file
mycolumn - <file

Đầu ra cho tất cả:

      12   1234      1
12345678      1    123
    1234 123456 123456

Xem thêm:


0

Đối với các tệp tương đối nhỏ, (trong đó độ dài tính bằng byte nhỏ hơn getconf ARG_MAX) và kích thước đầu vào ít nhiều được biết đến, (giả sử không có tên trái cây nào dài hơn 18 chữ cái), printfcó thể hữu ích, đây là một bashví dụ:

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

Đầu ra:

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

Lưu ý cách các con số được đúng hợp lý.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.