Experimente este comando:
grep -v -f file2.csv file1.csv > file3.csv
De acordo com o manual do grep :
-f FILE, --file=FILE
Obtain patterns from FILE, one per line. The empty file
contains zero patterns, and therefore matches nothing. (-f is
specified by POSIX.)
-v, --invert-match
Invert the sense of matching, to select non-matching lines. (-v
is specified by POSIX.)
Como Steeldriver disse em seu comentário é melhor adicionar também -x
e -F
que:
-F, --fixed-strings
Interpret PATTERN as a list of fixed strings, separated by
newlines, any of which is to be matched. (-F is specified by
POSIX.)
-x, --line-regexp
Select only those matches that exactly match the whole line.
(-x is specified by POSIX.)
Então, melhor comando é:
grep -xvFf file2.csv file1.csv > file3.csv
Esse comando usa file2.csv
linha como padrão e linha de impressão de file1.csv
que não corresponde ( -v
).