我有一个 RTF 文件,其中包含 pdf 文件路径列表。例如
Category1:
./Folder1/Folder2/1.pdf:18
./Folder3/2.pdf:18
./Folder5/4.pdf:10
Category2:
./Folder3/2.pdf:18
./Folder5/4.pdf:10
Category3:
./Folder1/Folder2/1.pdf:18
./Folder5/4.pdf:10
Category4:
./Folder6/7.pdf:10
./Folder5/4.pdf:10
./Folder3/2.pdf:18
附注: *.pdf:num 后面的数字 num 可以忽略。文件夹的完整路径也可以忽略。感兴趣的实体只是文件的名称.pdf
我想要一个按 pdf 名称及其出现次数排序的输出
输出格式为(文件名:文件在 rtf 中出现的次数),例如:
4.pdf : 4
2.pdf : 3
注2:任何提及次数少于3次的文件都可以被忽略。
一个可能的工具是
awk
。此命令可以完成以下工作:脚本使用
/
作为分隔符,然后split
在a
最后一个带:
分隔符的字段中,计数b
的出现次数a
。最后在 loo 中打印a
计数 > 2的所有元素可以通过使用分隔符
/
和来分割行来简化:
。在这种情况下,脚本为:PS 如果您想要源文件中的值的总和,
:
您可以尝试以下操作:只需添加
c
数组来对值进行求和:
使用Raku(以前称为 Perl_6)
或者(更简单):
或者(更简单):
Raku 是 Perl 家族中的一种编程语言。使用 Raku 的
awk
非-ne
自动打印命令行标志,您可以获得键/值对的排序哈希,其中每个 PDF 文件名的值等于该文件名被看到的次数。输出根据文件名按数字排序(作为数字)。在块.say
中使用END
将为您提供成对的“键值=>
”输出:示例输入:
示例输出:
如果需要成对的“键值
:
”输出,请将END
代码块更改为:如果需要消除与 的对
.value < 2
,请进一步将END
代码块更改为:最后,如果您更喜欢以“链式”方法/函数调用风格编写的代码,则下面的代码将提供与上面相同的(所需)代码:
https://raku.org
将该文件提取为文本文件,然后执行
和
perl
: