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
text-processing
awk
sed
paste
pmaipmui
fonte
fonte
Respostas:
Usando
paste
:fonte
Outra solução awk:
fonte
A
paste
solução é a mais portátil e mais eficiente. Estou apenas mencionando essa alternativa, caso você prefira seu comportamento no caso em que os dois arquivos não tenham o mesmo número de linhas:Com o GNU
sed
:Se
file1
tiver menos linhas do quefile2
, quandofile1
estiver esgotado,sed
não produzirá nada para ele (ao contrário de linhas vazias parapaste
).Se
file1
tiver mais linhas do quefile2
, essas linhas extras serão descartadas (em vez de imprimir linhas vazias parafile2
compaste
).fonte
Usando
awk
(gawk
,nawk
,mawk
):NR==FNR {x[FNR]=$0;next}
:NR==FNR
é correspondido apenas se o número do registro atual for igual ao número do registro atual do arquivo (portanto, é correspondido apenas durante o processamento do primeiro arquivo): armazena o registro atualmente processado na matrizx
em um índice igual ao número do registro atual e ignora o Registro atual{print x[FNR]"\n"$0}
: imprime o conteúdo da matrizx
em um índice igual ao número do registro de arquivo atual seguido por uma nova linha e pelo conteúdo do registro atualfonte
file1
efile2
no comando.mawk
também, e funciona também. Enfim sendo razoável eu não posso ver por que ele não deveria trabalhar apenas o contrário (ou seja, apenas mudando arquivos). Não é que seawk
preocupe com a entrada, linhas são linhas. Se algo não fosse suportado por sua versão, ele teria quebrado da primeira vez. Muito mais facilmente, simplesmente OP cometeu um erro ao alternar os arquivos de entrada nos argumentos.A solução mais fácil é dada abaixo.
ou
fonte
file1
seguida, uma linha defile2
e assim por diante ...)