Assumindo que bash
é usado (caso contrário, pré-classifique os arquivos de entrada com sort -o List1 List1
e sort -o List2 List2
e use List1 List2
em vez das substituições do processo):
$ join -t, -v1 <( sort List1 ) <( sort List2 )
2,name2
4,name4
5,name5
8,name8
9,name9
Isso faz uma operação de JOIN relacional entre seus dois arquivos, classificando o conteúdo primeiro. O -t,
informa join
para tratar vírgulas como o delimitador de campo e, com -v1
, solicitamos as entradas no primeiro arquivo que não se associa a nenhuma entrada no segundo. A junção acontece por padrão no primeiro campo de cada arquivo.
Para remover o último inteiro deste:
join -t, -v1 <( sort List1 ) <( sort List2 ) | sed 's/[0-9]*$//'
Para uma solução MySQL, você teria que fornecer o esquema SQL para as tabelas envolvidas, mas a consulta resultante seria parecida com
SELECT * FROM table1 WHERE joinfield1 NOT IN (SELECT joinfield2 FROM table2);