7 votos

Convertir ficha separado valores ASCII Tabla

¿Cuál es la forma más eficiente para convertir separados por tabulaciones de datos como este:

a   b   c   d   cat
NULL    NULL    NULL    NULL    NULL
NULL    NULL    NULL    d   d
NULL    NULL    c   NULL    c
NULL    NULL    c   d   c; d
NULL    b   NULL    NULL    b
NULL    b   NULL    d   b; d
NULL    b   c   NULL    b; c
NULL    b   c   d   b; c; d
a   NULL    NULL    NULL    a
a   NULL    NULL    d   a; d
a   NULL    c   NULL    a; c
a   NULL    c   d   a; c; d
a   b   NULL    NULL    a; b
a   b   NULL    d   a; b; d
a   b   c   NULL    a; b; c
a   b   c   d   a; b; c; d

Algo parecido a esto:

a    | b    | c    | d    | cat
-----+------+------+------+-----------
NULL | NULL | NULL | NULL | NULL
NULL | NULL | NULL | d    | d
NULL | NULL | c    | NULL | c
NULL | NULL | c    | d    | c; d
NULL | b    | NULL | NULL | b
NULL | b    | NULL | d    | b; d
NULL | b    | c    | NULL | b; c
NULL | b    | c    | d    | b; c; d
a    | NULL | NULL | NULL | a
a    | NULL | NULL | d    | a; d
a    | NULL | c    | NULL | a; c
a    | NULL | c    | d    | a; c; d
a    | b    | NULL | NULL | a; b
a    | b    | NULL | d    | a; b; d
a    | b    | c    | NULL | a; b; c
a    | b    | c    | d    | a; b; c; d

Actualmente yo uso Notepad++ de la siguiente manera:

  1. Convertir los tabuladores a espacios
  2. Alinear los datos manualmente
  3. Utilice el modo de columna para insertar los tubos

El segundo paso es el más aburrido y me hubiera gustado que al menos esta parte automatizada.

Nota: yo uso un navegador cuando se trabaja y a veces tengo un editor de texto abierto a su lado. La solución eficiente es el que requiere menor cantidad de esfuerzo. Puedo usar:

  • Notepad++
  • Genérico editor de texto con regexp buscar/reemplazar apoyo
  • JavaScript escrito dentro del navegador de la consola
  • Servicio web en línea
  • PHP en la línea de comandos (php -a)

8voto

DavidPostill Puntos 30286

¿Cómo puedo convertir ficha separado valores en una tabla ASCII?

Uso Generador de cuadros de texto para este tipo de tareas.

Pegué sus datos en esa página y crea la siguiente tabla:

+------+------+------+------+------------+
| a    | b    | c    | d    | cat        |
+------+------+------+------+------------+
| NULL | NULL | NULL | NULL | NULL       |
+------+------+------+------+------------+
| NULL | NULL | NULL | d    | d          |
+------+------+------+------+------------+
| NULL | NULL | c    | NULL | c          |
+------+------+------+------+------------+
| NULL | NULL | c    | d    | c; d       |
+------+------+------+------+------------+
| NULL | b    | NULL | NULL | b          |
+------+------+------+------+------------+
| NULL | b    | NULL | d    | b; d       |
+------+------+------+------+------------+
| NULL | b    | c    | NULL | b; c       |
+------+------+------+------+------------+
| NULL | b    | c    | d    | b; c; d    |
+------+------+------+------+------------+
| a    | NULL | NULL | NULL | a          |
+------+------+------+------+------------+
| a    | NULL | NULL | d    | a; d       |
+------+------+------+------+------------+
| a    | NULL | c    | NULL | a; c       |
+------+------+------+------+------------+
| a    | NULL | c    | d    | a; c; d    |
+------+------+------+------+------------+
| a    | b    | NULL | NULL | a; b       |
+------+------+------+------+------------+
| a    | b    | NULL | d    | a; b; d    |
+------+------+------+------+------------+
| a    | b    | c    | NULL | a; b; c    |
+------+------+------+------+------------+
| a    | b    | c    | d    | a; b; c; d |
+------+------+------+------+------------+

Entonces puede copiar esta salida (el generador ha realizado la mayor parte del trabajo duro), pegar en el Bloc de notas ++ y limpiar según corresponda.

5voto

malc_b Puntos 51

Si usted necesita una línea de comandos de solución, también puede utilizar pandoc con el pandoc-placetable filtro.

Lugar de la tabla, foo.txt y ejecución de:

pandoc-placetable --file=foo.txt --delimiter="\t" --header | pandoc -f json -t markdown-simple_tables-multiline_tables -o output.md

Que los resultados en el siguiente output.md:

| a    | b    | c    | d    | cat        |
|------|------|------|------|------------|
| NULL | NULL | NULL | NULL | NULL       |
| NULL | NULL | NULL | d    | d          |
| NULL | NULL | c    | NULL | c          |
| NULL | NULL | c    | d    | c; d       |
| NULL | b    | NULL | NULL | b          |
| NULL | b    | NULL | d    | b; d       |
| NULL | b    | c    | NULL | b; c       |
| NULL | b    | c    | d    | b; c; d    |
| a    | NULL | NULL | NULL | a          |
| a    | NULL | NULL | d    | a; d       |
| a    | NULL | c    | NULL | a; c       |
| a    | NULL | c    | d    | a; c; d    |
| a    | b    | NULL | NULL | a; b       |
| a    | b    | NULL | d    | a; b; d    |
| a    | b    | c    | NULL | a; b; c    |
| a    | b    | c    | d    | a; b; c; d |

Para leer desde la entrada estándar STDIN, de salir de la --file argumento. Para imprimir en la salida estándar, de salir de la -o argumento.

2voto

G-Man Puntos 2299

ruslan la idea de utilizar el de Unix/Linux column comando es buena, pero la línea de comandos en su respuesta no acaba de funcionar. Primero de todo, column no reconocen \t (o \\t) en la línea de comandos como una ficha. Si usted tiene bash, que puede hacer

column -t -s$'\t' foo.txt

De lo contrario, usted puede hacer

column -t -s"$(printf '\t')" foo.txt

Pero incluso eso no responde a la pregunta. Usted puede obtener las barras verticales haciendo

column -t -s$'\t' -o' | ' foo.txt

que produce una salida como

a    | b    | c    | d    | cat
NULL | NULL | NULL | NULL | NULL
NULL | NULL | NULL | d    | d
NULL | NULL | c    | NULL | c
NULL | NULL | c    | d    | c; d
NULL | b    | NULL | NULL | b
NULL | b    | NULL | d    | b; d
NULL | b    | c    | NULL | b; c
NULL | b    | c    | d    | b; c; d
a    | NULL | NULL | NULL | a
a    | NULL | NULL | d    | a; d
a    | NULL | c    | NULL | a; c
a    | NULL | c    | d    | a; c; d
a    | b    | NULL | NULL | a; b
a    | b    | NULL | d    | a; b; d
a    | b    | c    | NULL | a; b; c
a    | b    | c    | d    | a; b; c; d

Agregar la pizca de línea después de la cabecera manualmente no es tan tedioso.


Si usted no tiene acceso a un completo sistema Unix/Linux, usted puede usar Cygwin o uno de los otros Unix-le gusta esto.

1voto

scott_lotus Puntos 194
  1. Alinear los datos manualmente

...

El segundo paso es el más aburrido y me hubiera gustado que al menos esta parte automatizada.

Para ello se puede utilizar la column comando:

$ column -t -s\\t data.txt

Resultado:

a       b       c       d       ca                
NULL    NULL    NULL    NULL    NULL
NULL    NULL    NULL    d       d
NULL    NULL    c       NULL    c
NULL    NULL    c       d       c; d
NULL    b       NULL    NULL    b
NULL    b       NULL    d       b; d
NULL    b       c       NULL    b; c
NULL    b       c       d       b; c; d
a       NULL    NULL    NULL    a
a       NULL    NULL    d       a; d
a       NULL    c       NULL    a; c
a       NULL    c       d       a; c; d
a       b       NULL    NULL    a; b
a       b       NULL    d       a; b; d
a       b       c       NULL    a; b; c
a       b       c       d       a; b; c; d

Para usarlo en Windows, consulte esta pregunta.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: