Cách hiển thị TSV (csv) trong bảng điều khiển, khi các ô trống bị bỏ qua bởi: `cột -t -s $ '\ t'`


12

Tôi có tập tin với các cột spearated với tab.

Tôi có tệp khi một số hàng có các ô trống (lúc bắt đầu, ở giữa).

Trong những trường hợp như vậy column -t -s $'\t'đơn giản là thất bại:

Đầu vào:

$ echo -e 'A\tB\tC\tD\n\tb1\t\td1\n\t\t\td2\na3\t\t\td3' > in.tsv
$ hexdump -C in.tsv 
00000000  41 09 42 09 43 09 44 0a  09 62 31 09 09 64 31 0a  |A.B.C.D..b1..d1.|
00000010  09 09 09 64 32 0a 61 33  09 09 09 64 33 0a        |...d2.a3...d3.|
0000001e

đầu ra cột:

$ cat in.tsv | column -t -s $'\t'
A   B   C  D
b1  d1
d2
a3  d3

thay vì:

A       B       C       D
        b1              d1
                        d2
a3                      d3

Bạn có thể giới thiệu cách làm định dạng dòng lệnh TSV? (theo cách của Unix, tôi muốn chuyển đầu ra của chương trình thành định dạng, như column)

Bất kỳ cách columntiếp cận "sửa chữa" ? Có lẽ một công cụ khác?

Câu trả lời:


12

Bạn chỉ có thể sử dụng Debian column. Nó cung cấp tùy chọn -nlàm cho nó hoạt động chính xác như bạn muốn.

Ngoài ra, bạn có thể đặt một khoảng trắng trong các cột trống, sử dụng sed:

sed ':x s/\(^\|\t\)\t/\1 \t/; t x' < in.tsv | column -t -s $'\t'

thí dụ:

$ sed ':x s/\(^\|\t\)\t/\1 \t/; t x' < in.tsv | column -t -s $'\t'
A   B   C  D
    b1     d1
           d2
a3         d3

Tôi sợ làm thế nào sed sẽ hành xử với thay thế '^ \ | \ t' ... do '^' không chỉ định các nguyên tử. (Vì vậy, nó sẽ thay thế \1bằng chuỗi rỗng?
Grzegorz Wierzowiecki

Có, \(^\)một mình khớp với một chuỗi rỗng, được neo vào đầu dòng. \1"Tạo một bản sao" của chuỗi trống đó.
angus

0
sed 's/||/| |/g;s/||/| |/g' filename-here

Lệnh trên dành cho đường ống vì vậy thay thế nó bằng tabspace.

Bạn chỉ cần thay thế các cột trống bằng một khoảng trống và đặt đầu ra cho lệnh bạn đang sử dụng.

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.