Usando join :
$ join -t, -a 1 -a 2 -o0,1.2,2.2 -e ' -' file1 file2
a, 1, 2
b, 5, -
c, 2, -
f, 7, 9
g, -, 3
O utilitário padrão join executará uma operação JOIN relacional nos dois arquivos de entrada classificados .
Os sinalizadores usados aqui informam ao utilitário para esperar entrada delimitada por vírgula ( -t, ) e para produzir saída para todas as entradas em ambos os arquivos ( -a 1 -a 2 , caso contrário, produziria somente saída para linhas com o primeiro campo correspondente). Em seguida, solicitamos que o campo de união junto com a segunda coluna de ambos os arquivos seja exibido ( -o0,1.2,2.2 ) e digamos que qualquer campo ausente deve ser substituído pela sequência de caracteres ␣- (espaço-traço, com -e ' -' ). / p>
Se a entrada não estiver classificada, ela deve ser pré-classificada. Em shells que entendem a substituição de processos com <( ... ) , isso pode ser feito através de
join -t, -a 1 -a 2 -o0,1.2,2.2 -e ' -' <( sort file1 ) <( sort file2 )