我对grep
命令的输出感到有点困惑,它似乎是根据-f FILE
的大小截断结果。例如,考虑一个1000行的字符串文件patterns.txt
,例如:
adkgjwofjdjglkadjglkjasdfahdg
dsklfjsldkfjaghwioeghsdlkjfld
sdkljfsdkljghsdlfhkwhfklshdfo
...
sdklfjsdklfjsdklfjslkjghdfkjj
和1Gb queryfile.txt
来搜索我的模式。我跑的时候
grep -F -o -f patterns.txt queryfile.txt | grep -c adkgjwofjdjglkadjglkjasdfahdg
在这种情况下,即使adkgjwofjdjglkadjglkjasdfahdg
中有35次出现,该命令也会报告patterns.txt
的第1行(queryfile.txt
)的0个匹配项。我通过将patterns.txt
文件减少到前10行来验证这一点。重新运行
grep -F -o -f patterns_reduced-list.txt queryfile.txt | grep -c adkgjwofjdjglkadjglkjasdfahdg
正确报告adkgjwofjdjglkadjglkjasdfahdg
的35次出现。
发生了什么事?
答案 0 :(得分:3)
除非...... 模式重叠,否则不会发生这种情况。
检查此示例:
echo "xyxx" | grep -o -F yx$'\n'xy # output: xy
这会找到第二种模式(xy
),因此它找不到第一种模式(yx
)。
echo "xyxx" | grep -o -F yx # output: yx