скрипт для сравнения двух файлов и удаления строки совпадения в файле 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