Usando paste
:
paste -d \n file2 file1
Arquivo1:
.tid.setnr := 1123
.tid.setnr := 3345
.tid.setnr := 5431
.tid.setnr := 89323
Arquivo2:
.tid.info := 12
.tid.info := 3
.tid.info := 44
.tid.info := 60
Arquivo de saída:
.tid.info := 12
.tid.setnr := 1123
.tid.info := 3
.tid.setnr := 3345
.tid.info := 44
.tid.setnr := 5431
.tid.info := 60
.tid.setnr := 89323
Usando paste
:
paste -d \n file2 file1
Outra solução para o awk:
awk '{print; getline < "file1"; print}' file2
A paste
solution é a mais portátil e eficiente. Só estou mencionando essa alternativa caso você prefira o comportamento no caso em que os dois arquivos não tenham o mesmo número de linhas:
Com o GNU sed
:
sed Rfile1 file2
Se file1
tiver menos linhas que file2
, quando file1
estiver esgotado, sed
não produzirá nada para ele (em oposição a linhas vazias para paste
).
Se file1
tiver mais linhas que file2
, essas linhas extras serão descartadas (em vez de imprimir linhas vazias para file2
com paste
).
$ paste a b
1 a
2 b
3
4
$ paste -d \n a b
1
a
2
b
3
4
$ sed Rb a
1
a
2
b
3
4
$ sed Ra b
a
1
b
2
Usando awk
( gawk
, nawk
, mawk
):
awk 'NR==FNR {x[FNR]=$0;next} {print x[FNR]"\n"$0}' file2 file1 > outputfile
NR==FNR {x[FNR]=$0;next}
: NR==FNR
é correspondido apenas se o número do registro atual for igual ao número de registro do arquivo atual (portanto, ele corresponde apenas ao processar o primeiro arquivo): armazena o registro atualmente processado na matriz x
em um índice igual para o número de registro do arquivo atual e pula o registro atual {print x[FNR]"\n"$0}
: imprime o conteúdo da matriz x
em um índice igual ao número de registro do arquivo atual seguido por uma nova linha e pelo conteúdo do registro atual ~/tmp$ cat file1
.tid.setnr := 1123
.tid.setnr := 3345
.tid.setnr := 5431
.tid.setnr := 89323
~/tmp$ cat file2
.tid.info := 12
.tid.info := 3
.tid.info := 44
.tid.info := 60
~/tmp$ awk 'NR==FNR {x[FNR]=$0;next} {print x[FNR]"\n"$0}' file2 file1
.tid.info := 12
.tid.setnr := 1123
.tid.info := 3
.tid.setnr := 3345
.tid.info := 44
.tid.setnr := 5431
.tid.info := 60
.tid.setnr := 89323
A solução mais fácil é fornecida abaixo.
cat file1 >> file2
ou
cat file2 >> file1
Tags text-processing awk sed paste