После долгих колупаний diff со всевозможными комбинациями awk/sed нашлось довольно простое решение с использованием grep
grep -v -f file2 file1 > file3
Если файлы очень большие, то можно сделать так:
sort a.file > a.file.sorted
sort b.file > b.file.sorted
diff --speed-large-files a.file.sorted b.file.sorted
Так же можно использовать comm, которая позволяет работать с большими файлами. Выдержка из man’a:
comm {param} FILE1 FILE2 ... -1 suppress column 1 (lines unique to FILE1) -2 suppress column 2 (lines unique to FILE2) -3 suppress column 3 (lines that appear in both files) ...
А для сравнения блочных устройств существует утилита bfcmp