比较两个文件并删除文件 A 中的匹配行的脚本

比较两个文件并删除文件 A 中的匹配行的脚本

我有两个文件。文件 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

和文件 B:

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

答案1

您可以使用grep此任务,因此要从fileA.txt文件中删除与文件相同的行,fileB.txt它将是:

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

fileA_filtered.txt将包含这两个文件中的所有不相同的行。

答案2

如果你确实想匹配第一个逗号分隔的场地而不是在行中的任何地方,你可以这样做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

相关内容