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 pastepara más detalles.
También puedes usar el prcomando:
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 $0ximprime toda la línea desde el archivo1 usando$0luegoxcuál es la línea guardada del archivo2 .fuente
pasteEs el camino a seguir . Si desea verificar otros métodos, aquí hay unapythonsolució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
mapfilepara leer los archivos en matrices, o use un bucle while con dosreadcomandos, leyendo de cada uno su fd.array=( $(cmd) )oarray=( $var ). Usar en sumapfilelugar.La manera perl, fácil de entender:
Empezar con:
Salida:
fuente