Eu tenho dois arquivos que são delimitados por pipe e podem ter correspondências de coluna 1 + coluna 2 em ambos, ou um arquivo pode ter a entrada enquanto o outro não. Suponha que minha chave de correspondência seja igual a $ 1"-" $ 2 usando um pipe '|' como o FS.
arquivo1
1111|AAA|foo|50
1111|BBB|foo|30
2222|BBB|foo|10
arquivo2
1111|AAA|bar|10
1111|CCC|bar|20
3333|AAA|bar|40
A saída desejada seria a seguinte para a primeira entrada (eu tenho isso funcionando)
1111|AAA|50|10
Para a segunda entrada arquivo1 (se não houver coluna1+coluna2 correspondente em ambos os arquivos, substitua a entrada que está faltando para foo como 0. E vice-versa)
1111|BBB|30|0
E para uma chave de entrada (coluna1+coluna2) no arquivo2, mas não no arquivo1 (esta é a entrada 3 da saída esperada do arquivo 2)
3333|AAA|0|40
Assim, o formato geral de saída desejado está listando TODAS as chaves exclusivas que são representadas por column1+column2 em AMBOS os arquivos. Com as entradas da 3ª coluna sendo os valores do arquivo1 coluna 4 (ou 0 se o valor não existir no arquivo1) e a 4ª coluna na saída como os valores na coluna 4 do arquivo 2 (ou 0 se o valor não existir no arquivo2 ).
Eu fiz muitas pesquisas e tentei muitas coisas, mas tenho valores que não são exibidos se o par column1+column2 existir no arquivo2, mas não no arquivo1, usando o seguinte:
join -t"|" -e0 -a1 -a2 -o 1.2,1.3,1.5,2.5 <(<file1 awk -F"|" '{print $1"-"$2"|"$0}' | sort -k1,1) <(<file2 awk -F"|" '{print $1"-"$2"|"$0}' | sort -k1,1)
O caso acima me dá a saída esperada se houver uma correspondência de coluna1+coluna2 no arquivo1, mas não no arquivo2, e acrescenta um 0 para a correspondência não existente... Como posso fazer isso funcionar para TODOS os cenários?
O comando acima fará alguma substituição de processo adicionando uma chave na coluna 1 em ambos os arquivos que é column1+column2 e, em seguida, unirá com base nessa nova chave. -e0 adicionará um 0 se esta chave existir no arquivo1, mas não no arquivo2. Como posso fazê-lo cobrir o caso de: Nova chave (coluna1-coluna2) existe no arquivo 2, mas NÃO no arquivo 1?