Archivo1:
.tid.setnr := 1123
.tid.setnr := 3345
.tid.setnr := 5431
.tid.setnr := 89323
Archivo2:
.tid.info := 12
.tid.info := 3
.tid.info := 44
.tid.info := 60
Archivo de salida:
.tid.info := 12
.tid.setnr := 1123
.tid.info := 3
.tid.setnr := 3345
.tid.info := 44
.tid.setnr := 5431
.tid.info := 60
.tid.setnr := 89323
text-processing
awk
sed
paste
pmaipmui
fuente
fuente
Respuestas:
Utilizando
paste
:fuente
Otra solución awk:
fuente
La
paste
solución es la más portátil y más eficiente. Solo menciono esta alternativa en caso de que prefiera su comportamiento en el caso de que los dos archivos no tengan el mismo número de líneas:Con GNU
sed
:Si
file1
tiene menos líneas quefile2
, entonces cuandofile1
está agotado,sed
no generará nada para él (a diferencia de las líneas vacías parapaste
).Si
file1
tiene más líneas quefile2
, entonces esas líneas adicionales se descartarán (en lugar de imprimir líneas vacías parafile2
conpaste
).fuente
Uso de
awk
(gawk
,nawk
,mawk
):NR==FNR {x[FNR]=$0;next}
:NR==FNR
solo coincide si el número de registro actual es igual al número de registro del archivo actual (por lo tanto, solo coincide mientras se procesa el primer archivo): almacena el registro procesado actualmente en la matrizx
en un índice igual al número de registro del archivo actual y omite el registro actual{print x[FNR]"\n"$0}
: imprime el contenido de la matrizx
en un índice igual al número de registro del archivo actual seguido de una nueva línea y del contenido del registro actualfuente
file1
yfile2
en el comando.mawk
también, y también funciona. De todos modos, siendo razonable, no puedo ver por qué no debería funcionar al revés (es decir, simplemente cambiando los archivos). No es queawk
le importe la entrada, las líneas son líneas. Si algo no fuera compatible con su versión, se habría roto la primera vez. Más fácilmente, simplemente OP cometió un error al cambiar los archivos de entrada en los argumentos.La solución más fácil se da a continuación.
o
fuente
file1
una líneafile2
y así sucesivamente ...)