列出搜索词出现次数超过阈值的文件

列出搜索词出现次数超过阈值的文件

我有一个像这样的命令

rga --files-with-matches --count-matches --sort path -i -e "use cases?" -e "user stor(y|ies)" -e "Technical debt" -e "Code Quality" -e "software development" -e "Agile Manifesto"

输出就像

a1.pdf:18
a2.pdf:10
a3.pdf:14
....

这里,:NUM是匹配数。

我想要所有具有超过 10 个匹配项的文件(不带冒号和数字,以便我可以将输出通过管道传输到另一个命令)。喜欢:

a1.pdf
a3.pdf
....

我尝试过.. | cut -d':' -f2,但它只给出了数字。.. | cut -d':' -f1仅给出文件名。

这里的解决方案可能是什么?

答案1

即使文件名确实包含字符:,这也将起作用。它使用两个捕获组,第一个捕获直到(但不包括):行中最后一个字符(文件名)的所有内容,第二个捕获最后一个字符之后的所有数字:(计数)。与该模式不匹配的输入行将被忽略。

$ rga ... | perl -n -E 'm/^(.*):(\d+)$/; say $1 if $2 > 10'
a1.pdf
a3.pdf

它不适用于包含换行符的文件名。如果您需要它,并且rga可以生成 NUL 分隔的输出(例如,使用-0-z或类似的选项),您可以将其与 perl 的选项结合使用-0来读取 NUL 分隔的输入。

答案2

awk

... | awk -F: '$NF>10{ sub(/:[0-9]+$/, ""); print }'

拆分记录:并测试最后一个字段是否大于 10。如果条件为真,则删除:记录末尾的至少一位数字。打印(修改的)记录。

相关内容