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:
paste file1.txt file2.txt | cut -f 1,2,3,6
Aqui está uma maneira de pré-filtrar os dois arquivos que se baseiam na substituição do processo ksh / bash / zsh.
paste <(<file1.txt sed 's/[[:space:]][[:space:]]*[^[:space:]]*$//') \
<(<file1.txt sed 's/^[^[:space:]]*[[:space:]][[:space:]]*//')
O Awk é voltado principalmente para o processamento de um arquivo por vez, mas você pode ligar getline
para ler de outro arquivo em paralelo.
awk '
BEGIN {file2=ARGV[2]; ARGV[2]="";}
{$0 = $0 ORS getline(); print $1, $2, $3, $6;}
' file1.txt file2.txt
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.
pr -m -t -s\ File1.txt File2.txt | gawk '{print $1,$2,$3, $6}' > File3.txt