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