2009-11-12 9 views
17

Disculpe la pregunta quizás trivial.unix join separator char

Luché un poco con el unix join comando, tratando de obtener pestañas en lugar de espacios en blanco como los separadores por defecto. -t es el argumento, pero estos no funcionan (ubuntu 9.10 64 bits 2.6.31-14, GNU coreutils versión 7,4)

join file1 file2 -t"\t" 
join file1 file2 -t="\t" 
join file1 file2 -t="\\t" 
join file1 file2 -t $"\t" 

etcétera. Por supuesto, siempre se puede utilizar alguna solución poco elegante como

join file1 file2 > output 
sed "s/ /\t/g" output 

pero quería mirar :-) inteligente Por otra parte, si hay un argumento -t, tiene que trabajar.

+0

cuando el uso de -t, como se indica en la página hombre , dice "Use el carácter CHAR como el separador de campos de entrada y salida". cuando ambos archivos tienen el mismo terminador, entonces funciona. – ghostdog74

Respuesta

36

Creo que se necesita una variable generada sobre la marcha

Trate

join file1 file12 -t $'\t' 
+0

genio. ¡funciona! –

+0

Cool. No conocía la sintaxis '$ '...'' antes. – Boldewyn

+1

$ '\ t' funciona solo en bash y no funciona en POSIX shell (sh) – citrin

2

man join dice que las opciones tienen que aparecer delante de los nombres de los archivos. ¿Has probado

join -t "\t" file1 file2 

?

Editar: reflejo de la respuesta de Tonio, la línea correcta leería

join -t $'\t' file1 file2 
+0

Sí, no funciona. Otorga el error: join: pestaña de varios caracteres '\\ t ' –

+0

¿Quitar las comillas? Al menos el mensaje de error desaparece en mi terminal. – Boldewyn

+0

Estoy de acuerdo, el error desaparece, pero la salida está incorrectamente vacía así: -/ –

2
join -t "`echo '\t'`" file1 file2 

ps: en mi máquina, versión 5.1 del Servidor Red Hat Enterprise Linux (Tikanga), el comando join -t $'\t' file1 file2 devuelve "Nombre de variable no válida".

+0

Gracias por agregar una solución específica de la distribución –

+0

Que no funciona en Fedora 23, no extrae nada. – sebelk

4

Puede introducir ficha pulsando CTRL + V Tab

join -t '<CTRL+v><Tab>' file1 file2 
2

Un truco alternativa que parece funcionar es encerrar la opción -t entre comillas con el carácter de tabulación literal. Esto se ve así:

join '-t ' ... 

con un espacio variable entre la t y la cita de cierre (ya que es una pestaña).

con tipo, es:

join<Spc>'-t<Ctrl-v><Tab>' ... 
+0

probado y funciona bien en Fedora 23 – sebelk

0

Otra manera es:

join -t "`echo -e "\t"`" file1 file2`

o de una manera más bash-moda:

join -t "$(echo -e "\t")" file1 file