【问题标题】:awk can't get my for i loop to workawk 无法让我的 for i 循环工作
【发布时间】:2011-08-14 23:04:04
【问题描述】:

我正在尝试循环输入日志文件并添加其中一个字段的出现次数。

我知道字段 #8 将包含我想要添加的匹配项,并且该字段将包含一个介于 1 和 924 之间的数字。

到目前为止,我有这个 awk 单行:

awk '{count[$8]++}END{for(j in count) print j, count[j]" HIT"}' myfile.txt

但是,我希望 awk 输出未找到出现的女巫的数字并在其旁边打印 0。

例如:

1 5 HIT
2 0 HIT
3 55 HIT

我试过了:

awk '{for(i=1;i<=924;i++) print i, count[$8]++}' myfile.txt

编辑:我也试过这个

awk '{count[$8]++}END{for(i=1;i<925;i++) print i, count[i]" HIT"}' myfile.txt

它给了我这个:

919  HIT
920  HIT
921  HIT
922  HIT
923  HIT
924  HIT

而且我敢肯定,所有这些都值得考虑。

任何帮助将不胜感激!

【问题讨论】:

    标签: awk


    【解决方案1】:

    试试这个

    awk '{count[$8]++}END{for(i=1;i<925;i++) print i, count[i]" HIT"}' myfile.txt
    

    我希望这会有所帮助。

    附:由于您似乎是新用户,如果您得到对您有帮助的答案,请记住将其标记为已接受,和/或给它一个 +(或 -)作为有用的答案。

    【讨论】:

    • @shelter,我是 stackoverflow 的新手,但不是 serverfault :) 我尝试了您提交的代码,但计数似乎没有打印出来。我在每一行都有一个空格(请参阅我的编辑)。
    • @Alex: 嗯.. 我的解释是 $8 包含 1-924 的值。那是对的吗?如果是这样,那么 $8 列中是否有可能有额外的字符(很可能是空格)? FS值是多少。您看起来正在使用默认的空白。对吗?
    • @shelter,非常感谢...那里的数字有双引号...所以更改 FS 并调整列就可以了!
    猜你喜欢
    • 1970-01-01
    • 2020-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2017-11-11
    相关资源
    最近更新 更多