2010-09-27 34 views
114

Tengo dos archivos de texto, cada uno de ellos contiene una información facilitada por la línea tales como laCómo combinar dos archivos línea por línea en Bash

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

me gustaría fusionar tesis líneas archivos por líneas utilizando una fiesta secuencia de comandos para obtener:

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

¿Cómo se puede hacer esto en Bash?

Respuesta

177

Puede utilizar paste:

paste file1.txt file2.txt > fileresults.txt 
+0

¿Cómo funciona si quisiera utilizar un delimitador? – Teja

+3

@SOaddict '' 'paste -d" \ n "*> results.txt''' –

+0

' paste' separará cada columna con una pestaña a menos que anule con la opción '-d', por lo que puede usar algo como' awk', 'sed', etc ... para formatear cada línea. Ejemplo: 'pegar archivo1.txt archivo2.txt | awk '{printf "% -61s |% s \ n", $ 1, $ 2}' '... esto imita la salida 'diff --side-by-side') –

8

Comprobar

man paste 

posible seguido por algún comando como untabify o tabs2spaces

+0

M-x replace-string en Emacs sacará pestañas, presumiblemente Vim y tal vez algunos otros editores de texto pueden hacerlo también. – Ben

+6

use la opción -d para especificar un separador que no sea la pestaña – Pedru

18

aquí hay métodos no pegar

awk

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

Bash

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

trate de seguir.

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

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

Cuestiones relacionadas