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 )