说我有一个文件(它将有大约500万行 - 假设它们存在于big.txt文件中)
a
b
c
d
e
f
g
我想检查文件是否包含以下行:
d
g
f
(要查询的35个项目 - 假设它们属于query.txt文件)
查询它的最佳方法是什么?
谢谢!
答案 0 :(得分:1)
您可以使用grep -f
在另一个文件中查找一个文件的匹配项。然后,将输出与原始文件进行比较:
diff <(grep -f f2 f1 | sort) <(sort f2)
使用您的给定文件:
$ diff <(grep -f f2 f1 | sort) <(sort f2)
$
更改为
$ cat f2
z
g
f
$ diff <(grep -f f2 f1 | sort) <(sort f2)
2a3
> z
您还可以使用cmp
:
cmp <(grep -f f2 f1 | sort) <(sort f2)
查看原始文件:
$ cat f2
d
g
f
$ if cmp <(grep -f f2 f1 | sort) <(sort f2) &>/dev/null; then echo "equal"; fi
equal
与不同的人:
$ cat f2
z
g
f
$ if cmp <(grep -f f2 f1 | sort) <(sort f2) &>/dev/null; then echo "equal"; fi
$
答案 1 :(得分:0)
使用awk:
awk 'FNR==NR{a[$0];next} length(a) && $0 in a{delete a[$0]}
END {print (length(a))?"Does not exist":"Exists"}' f2 f1
答案 2 :(得分:-1)
pcregrep
是grep
的免费替换版,它完全支持与Perl兼容的正则表达式:特别是带有换行符的正则表达式。因此,您的问题可以解决如下:
pcregrep -M "c\n(.*\n)*f(.*\n)*g" inputfile