我使用此语法计算文件第二个字段中唯一值的出现次数。有人可以解释这是如何工作的。 Unix如何计算这个数?它是将每一行或整个文件读为一个..如何分配计数并递增它?
命令:
awk -F: '{a[$2]++} END {for ( i in a) { print i,a[i]}}' inputfile
答案 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