Я бы использовал следующий метод, основанный на awk
:
awk '{s=substr($0,1,22)}(FNR==NR){a[s];next}!(s in a)' A.dat B.dat
Это гарантирует, что вы всегда будете соответствовать первым 22 символам.
По сути, он делает следующее: каждый раз После чтения строки (без учета файла) создается небольшая строка s
, содержащая первые 22 символа строки. Если мы обрабатываем первый файл (FNR==NR)
, сохраняем строку в массиве a
, если мы обрабатываем второй файл, проверяем, является ли эта строка членом a
, и если нет, распечатайте строку.
Вы также можете попробовать решение на основе grep
, но это может привести к ложным срабатываниям, в зависимости от того, как вам нравится ваш ввод:
cut -c1-22 A.dat | grep -vFf - B.dat
Это, однако, может соответствовать первым 22 символам строк A.dat
в любом месте строк B.dat
(не обязательно первые 22 символа)