скрипт для сравнения двух файлов и удаления строки совпадения в файле A

У меня есть два файла. файл А:

      Modern Tales: Age Of Invention Playstation 4, 1935, 3478-3480
Modern Tales: Age Of Invention Xbox One, 3074
Moero Chronicle Switch, 6667, 12400, 28910, 29900, 29901, 29920
MOHAA Counter Intelligence, 
MOHAA MatchWatch, 950, 5500-5699, 13000-14000
MOHAA Missionary, 
Mokoko X Switch, 6667, 12400, 28910, 29900, 29901, 29920
Mokoko X Xbox One, 3074

и файл Б:

      MIX Game Server
MOHAA Counter Intelligence
MOHAA MatchWatch
MOHAA Missionary
MOHAA Reverend
MoneyWorks Datacentre
Monsoon Vulkano
Moonlight Game Streaming
MY-IPCAM Anywhere

Как я могу удалить целые строки из файла A, где его первый столбец идентичен файлу B? Окончательный файл должен быть:

      Modern Tales: Age Of Invention Playstation 4, 1935, 3478-3480
Modern Tales: Age Of Invention Xbox One, 3074
Moero Chronicle Switch, 6667, 12400, 28910, 29900, 29901, 29920
Mokoko X Switch, 6667, 12400, 28910, 29900, 29901, 29920
Mokoko X Xbox One, 3074

2 ответа

Вы можете использоватьgrepдля этой задачи, поэтому для удаления файла изfileA.txtэто те же строки, что и в файлеfileB.txtэто будет:

      grep -v -w -F -f fileB.txt fileA.txt > fileA_filtered.txt

fileA_filtered.txtбудет содержать все строки из этих двух файлов, которые не были одинаковыми.

Если вы действительно хотите сопоставить первое поле , разделенное запятыми , а не где-либо в строке, вы можете сделать это с помощьюawk:

      $ awk -F, 'NR==FNR{a[$0]; next} !($1 in a)' file_B file_A
Modern Tales: Age Of Invention Playstation 4, 1935, 3478-3480
Modern Tales: Age Of Invention Xbox One, 3074
Moero Chronicle Switch, 6667, 12400, 28910, 29900, 29901, 29920
Mokoko X Switch, 6667, 12400, 28910, 29900, 29901, 29920
Mokoko X Xbox One, 3074

В качестве альтернативы, поскольку ваши файлы кажутся предварительно отсортированными по первому полю, вы можете использоватьjoinкоманда:

      $ join -t, -j 1 -v 1 file_A file_B
Modern Tales: Age Of Invention Playstation 4, 1935, 3478-3480
Modern Tales: Age Of Invention Xbox One, 3074
Moero Chronicle Switch, 6667, 12400, 28910, 29900, 29901, 29920
Mokoko X Switch, 6667, 12400, 28910, 29900, 29901, 29920
Mokoko X Xbox One, 3074
Другие вопросы по тегам