Uma maneira simples de fazer isso é usar uma matriz 2D no awk
FNR==NR {a[$1FS$2][0]=$4FS$5FS$6; next}
{a[$1FS$2][1]=$4FS$5FS$6}
END {
empty="0"FS"0"FS"0"
for(i in a)
print i FS (a[i][0]? a[i][0] : empty) FS (a[i][1]? a[i][1] : empty)
}
Você pode salvar o script como um arquivo e executar
awk -f main.awk file1 file2
Explicação
- A primeira linha
FNR==NR
verifica o arquivo1 e armazena as colunas desejadas$4 $5 $6
com a chave associada$1 $2
em uma matriza[$1FS$2][0]
- A segunda linha faz basicamente a mesma coisa no arquivo2, mas armazena o valor na matriz
a[$1FS$2][1]
, observe que essas operações de atribuição de matriz removerão automaticamente as duplicatas, pois as matrizes no awk são associativas , o que significa que cada chave pode aparecer apenas uma vez - Na etapa final, em
END
, imprima cada linha e substitua cada valor vazio por uma string predefinida0 0 0
- Se você quiser que a saída seja classificada por ordem de valor de índice crescente, adicione um
PROCINFO["sorted_in"] = "@ind_str_asc"
à primeira linha dentro deEND
Se você tiver tempo, seria bastante útil consultar o Guia de Programação Gawk bem documentado