首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux-关于对shell输出进行排序

Linux-关于对shell输出进行排序
EN

Stack Overflow用户
提问于 2013-08-28 17:15:13
回答 7查看 80关注 0票数 0

我有来自这样的自定义日志文件的输出:

代码语言:javascript
复制
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

我想知道是否存在计算第三个字段的特定值的数量。例如,我可能需要计算cdyuminstall only的数量。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2013-08-28 17:19:35

您可以使用awk来获取第三个字段值,并使用wc -l来计算数字。

代码语言:javascript
复制
awk '$3=="cd"||$3=="yum"||$3=="install"||$3=="cat" {print $0}' file | wc -l

您也可以使用egrep,但是这将不仅在第三个字段上,而且在行中的其他地方查找这些单词。

代码语言:javascript
复制
egrep "(cd|yum|install|cat)" file | wc -l

如果您想在第三个字段上计算一个特定的单词,那么您可以在不需要多个regexs的情况下完成上面的操作。

代码语言:javascript
复制
awk '$3=="cd" {print $0}' | wc -l
票数 1
EN

Stack Overflow用户

发布于 2013-08-28 17:18:04

执行这项工作的一个经典shell脚本是:

代码语言:javascript
复制
awk '{print $3}' "$file" | sort | uniq -c | sort -n

使用awk从第3列中提取值,对相同的名称进行排序,计数重复数,按计数的顺序对输出进行排序。sort | uniq -c | sort -n部分是一个常见的模因。

如果您使用的是GNU awk,您可以在awk脚本中完成所有这些工作;它可能会更高效,但对于真正庞大的文件来说,它可能会在管道不存在的情况下耗尽内存(在必要时,sort会溢出到磁盘;编写在awk中溢出到磁盘的代码是不明智的)。

票数 1
EN

Stack Overflow用户

发布于 2013-08-28 17:25:10

使用cutsortuniq

代码语言:javascript
复制
$ cut -d" " -f3 inputfile | sort | uniq -c
      2 cd
      1 install
      1 ./linux
      6 make
      6 yum
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18494222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档