Как сравнить строки в двух файлах, сверху оставить строки, которые есть в первом файле но нет во втором, а ниже оставить строки которые есть во втором, но нет в первом используя awk ?

Чтобы сравнить строки из двух текстовых файлдов и оставить выше те записи, которых нет в первом файле, а справа — те записи, которых нет во втором файле, можно использовать awk в сочетании с массивами. Вот как это можно сделать.

Предположим, у вас есть файл data.txt со следующим содержимым:
	
apple
banana
cherry
date
fig
grape
orange
И предположим, что вы хотите сравнить этот файл с другим файлом filter.txt, который содержит:
	
banana
date
grape
kiwi
В этом случае вы хотите получить:

- Выше — записи из первого файла, которых нет во втором.
- Ниже — записи из второго файла, которых нет в первом.

Можно использовать следующую команду awk для достижения этой цели:
	
awk 'FNR==NR { filter[$1]; next } !($1 in filter) { print $1, "" } END { for (item in filter) if (!(item in seen)) print "", item }' filter.txt data.txt
Как это работает

- FNR==NR { filter[$1]; next }: Это условие обрабатывает первый файл filter.txt. Оно создает ассоциативный массив filter, в котором ключами являются записи из первого столбца. next пропускает оставшуюся часть скрипта для текущей строки.

- !($1 in filter) { print $1, "" }: Эта часть обрабатывает второй файл data.txt. Она проверяет, находится ли текущее значение в массиве filter. Если нет, то строка выводится слева с пустым значением справа.

- В блоке END происходит второй проход по массиву filter, где проверяется, нет ли значений из второго файла в первом файле. Если значение отсутствует, оно печатается справа.

Если вы запустите указанную команду с приведенными выше файлами, вы получите следующий результат:
	
apple 
cherry 
orange 

kiwi
Это значит, что apple, cherry, и orange отсутствуют во втором файле, а kiwi отсутствует в первом файле. Вы можете адаптировать эту команду для работы с вашими файлами и данными.