Como criar um novo arquivo mesclando colunas seletivas de dois arquivos separados usando o awk? Sem bagunçar as ordens dos elementos dos dois arquivos.
Exemplo: o arquivo 3 pode conter a coluna 1,2,3 do arquivo 1 e a coluna 4 do arquivo 2.
File 1
A 23 8 T
A 63 9 9
B 45 3 J
File 2
A 0
A 6
B 5
File 3
A 23 8 0
A 63 9 6
B 45 3 5
text-processing
awk
columns
dovah
fonte
fonte
pr -m -t -s\ File1.txt File2.txt | gawk '{print $1,$2,$3, $6}' > File3.txt
paste file1 file2
e imprimir os campos selecionados emawk
.file2
na memória, o que pode ser proibitivo se os arquivos forem grandes. Existe uma maneira mais simples de fazer isso sem sobrecarga de memória (veja minha resposta).Há uma ferramenta dedicada para que:
paste
. Concatena cada linha completa do primeiro arquivo com a linha correspondente do segundo arquivo; você pode remover colunas indesejadas antes ou depois. Por exemplo, supondo que suas colunas sejam delimitadas por tabulação:Aqui está uma maneira de pré-filtrar os dois arquivos que se baseiam na substituição do processo ksh / bash / zsh.
O Awk é voltado principalmente para o processamento de um arquivo por vez, mas você pode ligar
getline
para ler de outro arquivo em paralelo.Até agora, assumi que você deseja combinar a linha 1 do arquivo 1 com a linha 1 do arquivo 2, a linha 2 do arquivo 1 com a linha 2 do arquivo 2, etc. Se você deseja combinar o conteúdo de uma coluna, é uma questão completamente diferente.
join
fará o trabalho desde que a coluna que você deseja corresponder esteja classificada.fonte