¿Cómo intercalar las líneas de dos o más files?

Intenté get los 2 files de salida en un solo file. He intentado debajo del command:

cat file1 file2 

pero aquí los datos de file2 se agregan al file1 .

Lo que necesito es file1 1st line seguido de file2 first line, y file1 second line seguido de file2 second line, etc.

¿Alguien puede decirme cómo hacer esto de una manera simple?

Hay una aplicación para eso!

 $ cat file1 file1 line1 file1 line2 $ cat file2 file2 line1 file2 line2 

Ahora, si pasa estos files como arguments para paste :

 $ paste -d' ' file1 file2 file1 line1 file2 line1 file1 line2 file2 line2 

Si en "file1 primera línea seguido de file2 primera línea y file1 segunda línea seguido de file2 segunda línea, etc.", quiere decir que desea una nueva línea entre cada línea pegada, simplemente ajuste la opción -d (delimitador).

 $ paste -d'\n' file1 file2 file1 line1 file2 line1 file1 line2 file2 line2 

POSIX Awk; esto funciona con una cantidad arbitraria de files, y los files ni siquiera tienen que tener la misma cantidad de líneas. El script continúa hasta que todos los files estén fuera de línea:

 BEGIN { do { br = ch = 0 while (++ch < ARGC) if (getline < ARGV[ch]) { printf ch < ARGC - 1 ? $0 FS : $0 RS br = 1 } } while (br) } 

Solución rápida bash

 # Takes as many file arguments as needed function InterleaveFiles { local counter=0 local hasLine=true while [ $hasLine == true ]; do hasLine=false for i in "$@"; do line=$(awk 'NR == num_line {print; exit}' num_line=$((counter+1)) "$i") if [ -n "$line" ]; then echo "$line" hasLine=true fi done counter=$((counter+1)) done } 

InterleaveFiles file1 file2 file3 file4

 paste -d '\n' file1 file2 > file3 

donde file1 y file2 son los files de input y file3 será el resultado creado.