Jak wyświetlić TSV (csv) w konsoli, gdy puste komórki są pomijane przez: `column -t -s $ '\ t' '


12

Mam plik z kolumnami spearated tab.

Mam plik, gdy niektóre wiersze mają puste komórki (na początku, w środku).

W takich przypadkach column -t -s $'\t'po prostu zawodzi:

Wejście:

$ 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

wyjście kolumny:

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

zamiast:

A       B       C       D
        b1              d1
                        d2
a3                      d3

Czy mógłbyś polecić, jak wykonać formatowanie wiersza poleceń TSV? (w uniksowy sposób chcę przekazać dane wyjściowe programu do formatera, jak column)

Jakikolwiek sposób na „naprawienie” column? Może inne narzędzie?

Odpowiedzi:


12

Możesz po prostu użyć Debiana column. Zapewnia opcję, -nktóra sprawia, że ​​działa dokładnie tak, jak chcesz.

Alternatywnie możesz umieścić spację w pustych kolumnach, używając sed:

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

przykład:

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

Obawiam się, jak sed zachowa się z alternatywnym „^ \ | \ t” ... ponieważ „^” nie określa atomów. (A więc, czy zastąpi \1go pusty ciąg?
Grzegorz Wierzowiecki,

Tak, \(^\)sam dopasowuje pusty ciąg, zakotwiczony na początku wiersza. \1„tworzy kopię” tego pustego ciągu.
angus

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

Powyższe polecenie dotyczy potoku, więc zamień je na tabspace.

Wystarczy zastąpić puste kolumny pustą spacją i przesłać dane wyjściowe do polecenia, którego już używasz.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.