Aqui está uma maneira:
$ awk -F, 'NR==FNR{a[]++; next}!a[]' csv2 csv1
110,12,31,345
1,12,14,55
12,53,22,10
1,12,32,44
Explicação
-
-F,: define o separador de campos para,. Agora, o primeiro campo separado por vírgula de cada linha será, o segundoe assim por diante. -
NR==FNR: estas são duas variáveis especiais do awk. NR é a linha de entrada atual e FNR é o número da linha do arquivo atual. Os dois serão iguais apenas enquanto o primeiro arquivo estiver sendo lido. -
NR==FNR{a[]++; next}: durante a leitura do primeiro arquivo, salve os primeiros 4 campos como uma chave na matrizae defina seu valor como 1. Isso basicamente salva todos os 4 primeiros campos decsv1. Onextgarante que pulemos imediatamente para a próxima linha e não processemos o restante do script. -
!a[]: a ação padrão do awk é imprimir a linha atual. Então, se você usar algo que seja verdadeiro, o awk entende que deve imprimir essa linha.!a[ ]é verdadeiro quandoa[]não define o que acontecerá para as linhas emcsv1cujos primeiros 4 campos não estavam presentes em nenhuma linha decsv2. Portanto, esta diretiva fará com que todas as linhas cujos primeiros 4 campos nunca tenham sido vistos (para que seu valor na matrizanão seja 1) sejam impressas.