麻烦搞清楚这个剧本的一部分

时间:2015-05-29 20:21:03

标签: bash awk

我对此完全陌生,所以我认为这是一个相当容易的问题。

我有以下脚本给我通过我们的日志并提取信息:

awk '
match($0, /"username":"[^"]*"/) {
        split($3, d, "@")
        user = substr($0, RSTART + 12, RLENGTH - 17)
        split(user, e, "@")
        c[e[2] "," d[1] "," e[1]]++
}
END {   for(i in c)
                printf("%d,%s\n", c[i], i)
}'      mycompany.log | sort -t, -k2,2 -k3,3 -k4,4

此脚本执行的操作是遍历日志条目,以及与用户名相对应的任何条目,该用户名在该日期抓取该用户的日期,用户名,组织和唯一条目数。我非常理解如何获得所有这些值,除了每个用户的条目数(无法弄清楚它在脚本中的位置)。

现在基本上输出按列排序:

条目数,组织,日期,用户名

像这样:

609,organization,05-22,someuserfromthatorganization

我想要这个:

organization,05-22,someuserfromthatorganization,609

但正如我所提到的,我不确定脚本中这个数字是如何计算的,所以我无法弄清楚如何做到这一点。

1 个答案:

答案 0 :(得分:1)

关联数组c包含日期中每个用户的条目数。 e[2] "," d[1] "," e[1]连接组织,日期和用户名。然后将其用作带有c的{​​{1}}数组中的键。最后,c[e[2] "," d[1] "," e[1]]增量运算符使其计算重复次数。

最后它打印出这个数组的内容。