Як відобразити TSV (csv) у консолі, коли порожні комірки пропущено: `column -t -s $ '\ t'`


12

У мене є файл із стовпцями, на яких позначено tab.

У мене є файл, коли деякі рядки мають порожні комірки (на початку, посередині).

У таких випадках column -t -s $'\t'просто не вдається:

Вхід:

$ 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

Вихід стовпця:

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

замість:

A       B       C       D
        b1              d1
                        d2
a3                      d3

Чи можете ви порадити, як зробити форматування командного рядка TSV? (Unix способом, я хочу передавати вихід програми в формат, як column)

Будь-який спосіб "закріплення" columnпідходу? Може, ще один інструмент?

Відповіді:


12

Ви можете просто використовувати Debian column. Він надає можливість, -nзавдяки якому він працює саме так, як вам хочеться.

Крім того, ви можете помістити пробіл у порожні стовпці, використовуючи sed:

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

приклад:

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

Боюся, як sed поведе себе з альтернативою '^ \ | \ t' ... через '^' не вказується атомів. (Отже, чи буде це замінити \1порожнім рядком?
Grzegorz Wierzowiecki

Так, \(^\)поодинці відповідає порожній рядок, прикріплений до початку рядка. \1"створює копію" цього порожнього рядка.
angus

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

Вищевказана команда призначена для труби, тому замініть її на вкладку.

Вам просто потрібно замінити порожні стовпці порожнім пробілом і передати висновок команді, яку ви вже використовуєте.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.