【问题标题】:Count number of occurrences in a file计算文件中出现的次数
【发布时间】:2015-04-24 10:16:46
【问题描述】:

我的数据中有以下行

029 32389047809475037568907376 000000 00000000000
029 32389047809475037568907376 000000 00000000000
029 32389047809475037568907376 000000 00000000000
029 32389047809475037568907376 000000 00000000000
029 32389047809475037568907376 000000 00000000000 

我想在我的日志视图中计算从这些行开始的“029”数。

我该怎么做?

【问题讨论】:

  • 这有点宽泛。您能否更具体一点,并显示一些输入数据、预期输出以及您迄今为止尝试过的内容?
  • @fedorqui 有点宽泛是轻描淡写!
  • 现在我无法发布图片让您知道文件。但是,我可以告诉文件及其模式:
  • 不,请edit 你的问题表明这一点,因为代码或文本无法在 cmets 中正确显示。您可能想阅读How do I ask a good question?
  • 所以您想知道029 一般出现了多少次?还是在一行的开头?或者029 有多少行?请澄清一下。

标签: unix awk


【解决方案1】:

没有 awk 的解决方案:

grep -c "^029" file

找到所有以 029 开头的行并计算它们(-c 选项的作用)

【讨论】:

  • 我如何将这个巨大的日志文件转换成你提到的“文件”(文本格式/任何格式)?
  • 改用grep -c
  • @martin 这些行在我的日志文件中是一百万,即在我写命令“view cid_generation.GG.20150422.rpt”之后,所以当我查看这个文件时我只能执行有限的操作。跨度>
  • @martin 我的文件的内容会去哪里?正如提到的view ... | grep -c "^029" file 他们会进入文件吗?
  • 不,只做view .. | grep -c "^029",没有文件,@subash
【解决方案2】:

您可以为此使用uniq

$ uniq -cw 3 file
      5 029 32389047809475037568907376 000000 00000000000

选项:

-c, --count 按出现次数为行添加前缀

-w, --check-chars=N 每行比较不超过 N 个字符


如果您的uniq 版本没有-w 选项,标准awk 解决方案将是:

$ awk '/^029 /{c++}END{print c}' file
5

【讨论】:

  • uniq 是一个很好的解决方案,我现在没有。
  • 您需要一个 GNU uniq 版本才能使用 -w 选项。 OSX 是一个 BSD 变体,因此您必须使用您最喜欢的包管理器安装 GNU coreutils 才能获得所有额外的好处。
猜你喜欢
  • 2022-01-18
  • 1970-01-01
  • 2013-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多