如何通过检查第二个文本文件 (removethese.txt
) 从文本文件 (main.txt
) 中删除所有行。如果文件大于 10-100mb,什么是有效方法。 [使用苹果机]
示例:
main.txt
3
1
2
5
删除这些行
removethese.txt
3
2
9
输出:
output.txt
1
5
示例行(这些是我正在使用的实际行 - 顺序无关紧要):
ChIJW3p7Xz8YyIkRBD_TjKGJRS0
ChIJ08x-0kMayIkR5CcrF-xT6ZA
ChIJIxbjOykFyIkRzugZZ6tio1U
ChIJiaF4aOoEyIkR2c9WYapWDxM
ChIJ39HoPKDix4kRcfdIrxIVrqs
ChIJk5nEV8cHyIkRIhmxieR5ak8
ChIJs9INbrcfyIkRf0zLkA1NJEg
ChIJRycysg0cyIkRArqaCTwZ-E8
ChIJC8haxlUDyIkRfSfJOqwe698
ChIJxRVp80zpcEARAVmzvlCwA24
ChIJw8_LAaEEyIkR68nb8cpalSU
ChIJs35yqObit4kR05F4CXSHd_8
ChIJoRmgSdwGyIkRvLbhOE7xAHQ
ChIJaTtWBAWyVogRcpPDYK42-Nc
ChIJTUjGAqunVogR90Kc8hriW8c
ChIJN7P2NF8eVIgRwXdZeCjL5EQ
ChIJizGc0lsbVIgRDlIs85M5dBs
ChIJc8h6ZqccVIgR7u5aefJxjjc
ChIJ6YMOvOeYVogRjjCMCL6oQco
ChIJ54HcCsaeVogRIy9___RGZ6o
ChIJif92qn2YVogR87n0-9R5tLA
ChIJ0T5e1YaYVogRifrl7S_oeM8
ChIJwWGce4eYVogRcrfC5pvzNd4
最佳答案
有两种标准方法可以做到这一点:
使用grep
:
grep -vxFf removethese main
这使用:
-v
反转匹配。-x
匹配整行,例如,防止he
匹配hello
或highway to hell
。-F
使用固定字符串,以便参数按原样使用,而不是解释为正则表达式。-f
从另一个文件中获取模式。在这种情况下,从removethese
。
使用awk
:
$ awk 'FNR==NR {a[$0];next} !($0 in a)' removethese main
1
5
像这样,我们将 removethese
中的每一行存储在数组 a[]
中。然后,我们读取 main
文件并只打印数组中不存在的那些行。
关于regex - 根据第二个文本文件从文本文件中删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30820894/