Другой простой вариант — использовать comm
; ему просто нужен отсортированный ввод, поэтому дайте ему чистый ввод, отфильтровав «действительные номера счетов» (вся строка состоит только из 9 цифр ), затем передайте канал для сортировки перед перенаправлением в новый файл:
grep -Ex '[[:digit:]]{9}' account.txt | sort > account.txt.sorted
grep -Ex '[[:digit:]]{9}' customer.txt | sort > customer.txt.sorted
... затем используйте comm
, как вы указали:
{ echo 'Missing Account Number:'; comm -23 account.txt.sorted customer.txt.sorted; }
{ echo 'Extra Customer Number:'; comm -13 account.txt.sorted customer.txt.sorted; }
Данные выборки входных данных:
garbage
876251251
716126181
888281211
666615211
666615211extra
787878787
111212134
extra
garbage
876251251
876251251extra
716126181
792342108
792332668
666615211
760332429
791952441
676702288
junk
Результирующий вывод::
Missing Account Number:
111212134
787878787
888281211
Extra Customer Number:
676702288
760332429
791952441
792332668
792342108