使用awk计算第二个字段中唯一值的出现次数

时间:2017-05-10 08:09:16

标签: unix awk

我使用此语法计算文件第二个字段中唯一值的出现次数。有人可以解释这是如何工作的。 Unix如何计算这个数?它是将每一行或整个文件读为一个..如何分配计数并递增它?

命令:

awk -F:  '{a[$2]++} END {for ( i in a) { print i,a[i]}}' inputfile

1 个答案:

答案 0 :(得分:2)

它不是 Unix计算而是awk; awk不是Unix或shell,它是一种语言。提交的awk程序计算第二个字段($2。由:分隔)中的每个唯一值出现的次数,并输出值和相关计数。

awk -F: '              # set the field separator to ":"
{                      
                       # awk reads in records or lines in a loop
    a[$2]++            # here it hashes each value to a and counts each occurrance 
} 
END {                  # after all records have been processed
    for ( i in a) {    # hash a is looped thru in no particular order
        print i,a[i]   # and value-count pairs are outputed
    }
}' inputfile

如果您想了解更多关于awk的信息,请阅读@EdMorton的以下引用(*见下文):所有awk信息的最佳来源是Arnold Robbins撰写的Effective Awk Programming,第4版。如果您有任何其他书籍,请将其丢弃,如果您正在尝试从网站上学习 - 请不要因为大多数书籍完全没有废话。得到这本书。

*)现在去看书。

修改 a[$2]++如何运作:

示例数据和a[$2]的值:

1 val1 # a[$2]++ causes: a["val1"] = 1
2 val2 # a[$2]++ causes: a["val2"] = 1
3 val1 # a[$2]++ causes: a["val1"] = 2
4 val1 # a[$2]++ causes: a["val1"] = 3