Eu tenho dois arquivos que são delimitados por pipe e podem ter correspondências de coluna 1 + coluna2 em ambos, ou um arquivo pode ter a entrada enquanto o outro não. Suponha que minha chave de partida eu estou saindo de 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 (estou trabalhando)
1111|AAA|50|10
Para o segundo arquivo de entrada1 (Se não houver correspondência de coluna1 + coluna2 em ambos os arquivos, substitua a entrada que está faltando para foo como 0. E o contrário)
1111|BBB|30|0
E para uma chave de entrada (coluna1 + coluna2) no arquivo2, mas não no arquivo1 (Esta é a entrada 3 do arquivo 2 da saída esperada)
3333|AAA|0|40
Portanto, o formato geral de saída desejado está listando TODAS as chaves exclusivas que são representadas por coluna1 + coluna2 em AMBOS os arquivos. Com as entradas da terceira coluna sendo esses valores da coluna 1 do arquivo 1 (ou 0 se o valor não existir no arquivo1) e da quarta coluna na saída como aqueles valores na coluna 4 do arquivo 2 (ou 0 se o valor não existir no arquivo2 ).
Eu fiz muita pesquisa e tentei muitas coisas, mas tenho valores que não saem 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 coluna1 + coluna2 no arquivo1, mas não no arquivo2, e acrescentar 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 depois unirá com base nessa nova chave. -e0 adicionará um 0 se essa chave existir no arquivo1, mas não no arquivo2. Como posso obtê-lo para cobrir o caso de: Nova chave (column1-column2) existe no arquivo 2 mas NÃO no arquivo 1?