Cómo combinar dos archivos línea por línea en Bash


178

Tengo dos archivos de texto, cada uno de ellos contiene información por línea como esa

file1.txt            file2.txt
----------           ---------
linef11              linef21
linef12              linef22
linef13              linef23
 .                    .
 .                    .
 .                    .

Me gustaría fusionar estos archivos líneas por líneas usando un script bash para obtener:

fileresult.txt
--------------
linef11     linef21
linef12     linef22
linef13     linef23
 .           .
 .           .
 .           .

¿Cómo se puede hacer esto en Bash?

Respuestas:


272

Puedes usar paste:

paste file1.txt file2.txt > fileresults.txt

¿Cómo funciona si quisiera usar un delimitador?
Teja

8
@SOaddictpaste -d "\n" * > results.txt
Ostap Maliuvanchuk

pasteseparará cada columna con una pestaña a menos que anule la -dopción, por lo que puede usar algo como awk, sed, etc ... para dar formato a cada línea. Ejemplo: paste file1.txt file2.txt | awk '{printf "%-61s | %s\n", $1,$2}'... esto imita la diff --side-by-sidesalida)
Yzmir Ramirez

Gran respuesta. ¡Usa la herramienta hecha para el trabajo!
Tony

44
paste -d ""para concatenar líneas sin delimitadores, espacio
Victoria Stuart

20

aquí hay métodos sin pegar

awk

awk 'BEGIN {OFS=" "}{
  getline line < "file2"
  print $0,line
} ' file1

Intento

exec 6<"file2"
while read -r line
do
    read -r f2line <&6
    echo "${line}${f2line}"
done <"file1"
exec 6<&-

11

Intenta seguirlo.

pr -tmJ a.txt b.txt > c.txt

1
Además, use la opción -s si desea cambiar el separador. (+1)
user.friendly

la opción J no funciona en macOS Mojave pero su comando funciona perfectamente. Gracias.
Pato

8

Cheque

man paste

posible seguido de algún comando como untabifyotabs2spaces


Mx replace-string en Emacs eliminará pestañas, presumiblemente Vim y tal vez algunos otros editores de texto también puedan hacerlo.
Ben

77
use la opción -d para especificar un separador que no sea la pestaña
Pedru
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.