Perl 获取大型文本文件中特定行位置中唯一值的数量

Perl 获取大型文本文件中特定行位置中唯一值的数量,perl,awk,grep,Perl,Awk,Grep,全部, 我有一个大型服务器日志,其中包含以下条目: 未从模块中找到 紧随其后的是一个引号,后跟模块的位置。文件长度超过4800行,每个模块可能出现100次以上。因此,我想做的是类似于wc-l的事情,但随后只显示服务器日志的模块名部分中唯一值的数量。有什么想法吗?grep-oP'(?grep-oP')? 可能接近您想要的,但如果没有一些示例输入和预期输出,很难猜测 perl -nlwe '$a{$_}++ }{ print "$_ : $a{$_}" for keys %a' log.txt 可

全部,

我有一个大型服务器日志,其中包含以下条目: 未从模块中找到

紧随其后的是一个引号,后跟模块的位置。文件长度超过4800行,每个模块可能出现100次以上。因此,我想做的是类似于wc-l的事情,但随后只显示服务器日志的模块名部分中唯一值的数量。有什么想法吗?

grep-oP'(?
grep-oP')?
可能接近您想要的,但如果没有一些示例输入和预期输出,很难猜测

perl -nlwe '$a{$_}++ }{ print "$_ : $a{$_}" for keys %a' log.txt
可能接近您想要的,但如果没有一些示例输入和预期输出,很难猜测

perl -nlwe '$a{$_}++ }{ print "$_ : $a{$_}" for keys %a' log.txt
为每行创建一个哈希键,然后在末尾打印这些键

grep 'entry: not found from Module' logfile | sort -u | wc -l

为每行创建一个散列键,然后在末尾打印键。

为什么不使用
uniq-c
来获得所有唯一值的计数?一个“引号”是一个单引号
还是一个双引号
模块id的末尾是否有一个匹配的?发布一些小的、有代表性的样本输入和预期输出。为什么不使用
uniq-c
来获得所有唯一值的计数?一个“引号”是一个单引号
还是一个双引号
"
模块id的末尾是否有一个匹配的?发布一些小的、有代表性的示例输入和预期的输出。@WinnieNicklaus是的,刚刚修复了它。我只是想用我的答案指出,这里可能不需要Perl正则表达式。嗯,可能除了模块名称之外还有其他信息,因此,最安全的做法是只提取模块名称本身,而不是提取包含它们的整行。@Ed:太好了,我不知道这个选项。在管道中使用sort和uniq的通常原因是,当您需要每个唯一项的计数时,那么您就可以使用
sort | uniq-c
。我想这实际上更符合实际根据OP的要求,即获取每个模块名称的计数,而不是将所有输出传输到
wc-l
,以获取所有“未找到”的计数行。@EdMorton
显示服务器日志的模块名部分中唯一值的数量
——我更倾向于认为这意味着刚才提到的模块数量。@WinnieNicklaus是的,刚刚修复了它。我只是想用我的回答指出,这里可能不需要Perl正则表达式。好吧,我可能是在那里“行中除了模块名称之外还有其他信息,因此只提取模块名称本身而不是提取包含它们的整行是最安全的。@Ed:太好了,我不知道这个选项。在管道中使用sort和uniq的通常原因是,当您需要对每个唯一条目进行计数时,那么您就可以使用
sort|了。”uniq-c
。我认为这实际上可能更符合OP的要求,即获取每个模块名称的计数,而不是将所有输出传输到
wc-l
以获取所有“未找到”的计数行。@EdMorton
显示服务器日志的模块名部分中唯一值的数量
——我更倾向于认为这意味着提到的模块数量。
grep 'entry: not found from Module' logfile | sort -u | wc -l