Làm cách nào để căn chỉnh các cột trong đầu ra từ một lệnh UNIX?


21

Tôi đã từng biết về một lệnh - một lệnh thực tế ghi nhớ bạn, không phải ma thuật sed / awk - đã định dạng đầu vào của nó để được căn chỉnh trong các cột. Ví dụ: nếu bạn chạy:

% echo -e "aaaaa bbbbbbb\ncc ddd"
aaaaa bbbbbbb
cc ddd

Nhưng nếu bạn chạy đầu ra thông qua lệnh mà tôi đã quên tên:

% echo -e "aaaaa bbbbbbb\ncc ddd" | mystery_command
aaaaa    bbbbbbb
cc       ddd

Có ai biết tên của lệnh đó không?

Câu trả lời:



0

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

Vì 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:

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 cookie và Chính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.