GNU/Linux >> Tutoriales Linux >  >> Linux

¿Combinar dos archivos línea por línea con el símbolo delimitador de tubería triple “|||”?

Tengo dos archivos paralelos con el mismo número de líneas en dos idiomas y planeo fusionar estos dos archivos línea por línea con el delimitador ||| . Por ejemplo, los dos archivos son los siguientes:

Archivo A:

1Mo 1,1 I love you.
1Mo 1,2 I like you.
Hi 1,3 I am hungry.
Hi 1,4 I am foolish.

Archivo B:

1Mo 1,1 Ich liebe dich.
1Mo 1,2 Ich mag dich.
Hi 1,3 Ich habe Durst.
Hi 1,4 Ich bin neu.

El resultado esperado es así:

1Mo 1,1 I love you. ||| 1Mo 1,1 Ich liebe dich.
1Mo 1,2 I like you. ||| 1Mo 1,2 Ich mag dich.
Hi 1,3 I am hungry. ||| Hi 1,3 Ich habe Durst.
Hi 1,4 I am foolish. ||| Hi 1,4 Ich bin neu.

Probé paste comando como:

paste -d "|||" fileA fileB

Pero la salida devuelta solo contiene una tubería como:

1Mo 1,1 I love you. |1Mo 1,1 Ich liebe dich.
1Mo 1,2 I like you. |1Mo 1,2 Ich mag dich.
 

¿Hay alguna forma de separar cada par de líneas por tripe pipe |||? ?

Respuesta aceptada:

Con pasta POSIX:

:|paste -d ' ||| ' fileA - - - - fileB

paste concatenará las líneas correspondientes de todos los archivos de entrada. Aquí tenemos seis archivos, fileA , cuatro archivos ficticios del estándar en - y fileB .

La lista de delimitadores incluye un espacio, tres conductos y un espacio en ese orden será utilizado por paste circularmente.

Para la primera línea de seis archivos, fileA se concatenará con el primer archivo ficticio (que no es nada, gracias al operador no-op :), produce line1-fileA<space> .

El primer archivo ficticio se concatenará con el segundo mediante una canalización, producirá line1-fileA | , luego el segundo archivo ficticio con el tercer archivo ficticio, produce line1-fileA || , el tercer archivo ficticio con el cuarto archivo ficticio, produce line1-fileA ||| .

Y el cuarto archivo ficticio con fileB , produce line1-fileA ||| line1-fileB .

Esos pasos se repetirán para todas las líneas, le darán el resultado esperado.

El uso de :| es para escribir menos y se usa principalmente en shell interactivo. En un script, debe usar:

</dev/null paste -d ' ||| ' fileA - - - - fileB

para evitar que se genere una subcapa.


Linux
  1. Ordenarse con ordenar en la línea de comando

  2. Manipulación de texto en la línea de comando con sed

  3. Combinar manualmente dos archivos usando diff

  4. Combinar dos archivos HTML en un archivo HTML maestro

  5. Combinar archivos pdf con clasificación numérica

Sugerencias para enumerar archivos con ls en la línea de comandos de Linux

Manipulación de texto en la línea de comando con grep

Seguimiento del tiempo con Timewarrior en la línea de comandos

Cómo encontrar archivos con el comando fd en Linux

Manera fácil de fusionar archivos con el comando Cat

Copie archivos de forma segura con el comando SCP