Cómo mostrar TSV (csv) en la consola, cuando se omiten celdas vacías por: `column -t -s $ '\ t' '


12

Tengo un archivo con columnas con spearated tab.

Tengo un archivo cuando algunas filas tienen celdas vacías (al principio, en el medio).

En tales casos column -t -s $'\t'simplemente falla:

Entrada:

$ 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

salida de columna:

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

en lugar de:

A       B       C       D
        b1              d1
                        d2
a3                      d3

¿Podría recomendarme cómo hacer el formato de línea de comando TSV? (en modo Unix, quiero canalizar la salida del programa en formateador, como column)

¿Alguna forma de "arreglar" el columnenfoque? Tal vez otra herramienta?

Respuestas:


12

Puedes usar Debian's column. Proporciona la opción -nque hace que funcione exactamente como lo desea.

Alternativamente, puede poner un espacio en las columnas vacías, usando sed:

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

ejemplo:

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

Me temo cómo se comportará sed con la alternativa '^ \ | \ t' ... debido a que '^' no está especificando átomos. (Entonces, ¿se va a sustituir \1con una cuerda vacía?
Grzegorz Wierzowiecki

Sí, \(^\)solo coincide con una cadena vacía, anclada al comienzo de la línea. \1"produce una copia" de esa cadena vacía.
angus

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

El comando anterior es para tubería, así que reemplácelo con espacio de tabulación.

Solo necesita reemplazar las columnas vacías con un espacio en blanco y canalizar la salida al comando que ya está utilizando.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.