我想知道fgrep是否是从包含另一个文件(file2)中的字符串的文件(File2)中删除行的最快和最有效的方法。
我发现fgrep函数应该这样做:
fgrep -v -f file1 file2 > file_with_lines_containing_search_strings_removed我不知道这对非常大的文件是否有效。
我有两个100,000行的文件,我想使用最快的方法。
谢谢。
祝所有看上去滑稽的美国人7月4日快乐。
发布于 2017-07-05 08:48:44
如果您希望“包含在另一个文件中找到的字符串的行”(而不是“包含与另一个文件中的regExp匹配的字符串的行”),请尝试:
grep -vFf file1 file2 > file3"grep -F“不是寻找regexp匹配,而是寻找简单的字符串匹配(更快)。
甚至更好
grep -vwFf file1 file2 #respect word boundary1)构建一个10万个随机行(例如file2 )
seq 1000000 | shuf -n 100000 > file22)构建一个10,000行随机行,例如file1 (要删除的字符串)
seq 1000000 | shuf -n 10000 > file131)使用grep -F - time grep -vwFf file1 file2 > file31
real 0m0.111s
user 0m0.100s
sys 0m0.008s32)没有-F - time grep -vwf file1 file2 > file32
..。几个小时!
if file1 has just 300 lines -- 0.327s very fast
.... 600 lines -- 8.326s
.... 900 lines -- 35.334s
.... 1200 lines -- 1m31.433s (quadratic with file1 len?)
.... 10000 lines -- it is still calculating (several hours?)
UPDATED 1h03m53.983sgrep -vFf file1 file2比grep -vf快得多grep -vFf file1 file2在大file1文件方面没有问题grep -vf file1 file2随file1文件大小的增加而受到邪恶的影响(仅在大于500行或>4K字节时才可见)发布于 2017-07-05 03:03:01
是的会没事的。最糟糕的情况是,具有要排除的字符串的文件等于正在处理的文件的大小,并且大小不适合内存。如果有这种情况,那么将排除文件分割成块并运行多个传递。
https://unix.stackexchange.com/questions/375351
复制相似问题