我有来自这样的自定义日志文件的输出:
8 24 yum
8 24 yum
8 24 make
8 24 make
8 24 cd
8 24 cd
8 25 make
8 25 make
8 25 make
8 26 yum
8 26 yum
8 26 make
8 27 yum
8 27 install
8 28 ./linux
8 28 yum我想知道是否存在计算第三个字段的特定值的数量。例如,我可能需要计算cd、yum和install only的数量。
发布于 2013-08-28 17:19:35
您可以使用awk来获取第三个字段值,并使用wc -l来计算数字。
awk '$3=="cd"||$3=="yum"||$3=="install"||$3=="cat" {print $0}' file | wc -l您也可以使用egrep,但是这将不仅在第三个字段上,而且在行中的其他地方查找这些单词。
egrep "(cd|yum|install|cat)" file | wc -l如果您想在第三个字段上计算一个特定的单词,那么您可以在不需要多个regexs的情况下完成上面的操作。
awk '$3=="cd" {print $0}' | wc -l发布于 2013-08-28 17:18:04
执行这项工作的一个经典shell脚本是:
awk '{print $3}' "$file" | sort | uniq -c | sort -n使用awk从第3列中提取值,对相同的名称进行排序,计数重复数,按计数的顺序对输出进行排序。sort | uniq -c | sort -n部分是一个常见的模因。
如果您使用的是GNU awk,您可以在awk脚本中完成所有这些工作;它可能会更高效,但对于真正庞大的文件来说,它可能会在管道不存在的情况下耗尽内存(在必要时,sort会溢出到磁盘;编写在awk中溢出到磁盘的代码是不明智的)。
发布于 2013-08-28 17:25:10
使用cut,sort和uniq
$ cut -d" " -f3 inputfile | sort | uniq -c
2 cd
1 install
1 ./linux
6 make
6 yumhttps://stackoverflow.com/questions/18494222
复制相似问题