Tente isto:
$ awk 'FNR==NR{a[FNR]=$2;next};{$NF=a[FNR]};1' file2 file1
A 23 8 0
A 63 9 6
B 45 3 5
Como criar um novo arquivo mesclando colunas seletivas de dois arquivos separados usando o awk? Sem bagunçar as ordens de elementos de ambos os 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
Existe uma ferramenta dedicada para isso: paste
. Ele 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ções:
paste file1.txt file2.txt | cut -f 1,2,3,6
Aqui está uma maneira de pré-filtrar os dois arquivos que dependem da 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 chamar getline
para ler 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 eu assumi que você deseja corresponder 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 corresponder ao conteúdo de uma coluna , isso é um assunto completamente diferente. join
fará o trabalho desde que a coluna que você deseja combinar esteja classificada.
Tags text-processing awk columns