comando pegar: establecer delimitadores (múltiples)


9

En Linux, tengo el siguiente problema con paste(GNU coreutils) 8.13:

Intentar establecer otro delimitador que no sea el predeterminado (TAB) da como resultado simplemente imprimir el primer carácter del delimitador definido o ignorarlo perfectamente.

Pregunta : ¿Cómo se definen los delimitadores (múltiples) al usar paste ?

Simplemente usando, por ejemplo, abc-123 como delimitador sería bueno. Con "múltiple" quiero decir, por ejemplo, 2 TABS en lugar de uno.


Los patrones que encierran los delimitadores que he probado hasta ahora fueron

  • --delimiters="\delimiter"
  • --delimiters='\delimiter'
  • --delimiters=$"\delimiter"
  • --delimiters=$'\delimiter'

Todo con el mismo resultado: solo se acepta el primer personaje o se ignora perfectamente. También probé la versión corta -d"\"y varias instancias & ndahs; nada.

También:

  • --delimiters="\\" → Mensaje de error

Lo que funciona perfectamente, aunque no lo que quiero:

  • --delimiters="\n" → nueva línea
  • --delimiters="\0" → nada en el medio
  • --delimiters="\t"TAB, el valor predeterminado. Excelente.

Respuestas:


17

Para tener abcentre el archivo 1 y el archivo 2, puede hacer:

paste -d abc file1 /dev/null /dev/null file2

O:

paste -d abc file1 - - file2 < /dev/null

Si quieres dos pestañas:

paste file1 /dev/null file2

" Mediante /dev/nullla creación de dos columnas en el procesamiento de textos " (además de las obras: es este conocimiento común que he echado de menos hasta ahora, y si no es: ¿de dónde sacaste esta información?)
ERCH

1
@ Chirp.NotLuke. /dev/nullactúa como un archivo vacío al leer, por lo que está pegando file1, y el archivo vacío, y el archivo vacío, archivo2 con separadores siendo, a su vez a, by c. Los detalles sobre cómo -dfuncionan están en la pastepágina del manual.
Stéphane Chazelas

@ StéphaneChazelas ¿también puedes agregar pr -mts'abc' file1 file2como alternativa?
Sundeep

4

Es porque solo le está dando dos archivos para unir, cada carácter de cadena delimitador se usa entre cada combinación de líneas de cada uno de los archivos de entrada.

p.ej

file1 line1 DELIMCHAR0 file2 line1 DELIMECHAR1 file3 line1 ...
file1 line2 DELIMCHAR0 file2 line2 DELIMECHAR1 file3 line2 ...
...

2

En los sistemas BSD (no Linux, que yo sepa), existe la lamutilidad (como en "laminado"), que es más rápida y más corta que la solución anterior:

lam file1 -s delimiter file2
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.