gato archivo1
foo
ice
two
cat file2
bar
cream
hundred
Salida deseada:
foobar
icecream
twohundred
file1 y file2 siempre tendrán la misma cantidad de líneas en mi escenario, en caso de que eso facilite las cosas.
La herramienta adecuada para este trabajo es probablemente paste
paste -d '' file1 file2
Ver man paste
para más detalles.
También puedes usar el pr
comando:
pr -TmJS"" file1 file2
dónde
-T
apaga la paginación-mJ
m archivos erge, J líneas completas oining-S""
separe las columnas con una cadena vacía Si realmente quisieras hacerlo usando bash shell puro (no recomendado), entonces esto es lo que sugeriría:
while IFS= read -u3 -r a && IFS= read -u4 -r b; do
printf '%s%s\n' "$a" "$b"
done 3<file1 4<file2
(Solo se incluye esto porque el tema surgió en los comentarios a otra solución de bash puro propuesta).
A través de awk way:
getline x<"file2"
lee la línea completa del archivo2 y la mantiene en la variable x .print $0x
imprime toda la línea desde el archivo1 usando$0
luegox
cuál es la línea guardada del archivo2 .fuente
paste
Es el camino a seguir . Si desea verificar otros métodos, aquí hay unapython
solución:Si tiene pocas líneas:
Tenga en cuenta que para un número desigual de líneas, esta terminará en la última línea del archivo que termina primero.
fuente
Además, con pure
bash
(tenga en cuenta que esto ignorará totalmente las líneas vacías):fuente
mapfile
para leer los archivos en matrices, o use un bucle while con dosread
comandos, leyendo de cada uno su fd.array=( $(cmd) )
oarray=( $var )
. Usar en sumapfile
lugar.La manera perl, fácil de entender:
Empezar con:
Salida:
fuente