我有一个任务,我必须用awk计算一列中每个单词的平均长度。
awk -F'\t' '{print length ($8) } END { print "Average = ",sum/NR}' file
在输出中,我获得了每行的总长度,但不计算平均长度,输出仅显示Average = 0
,这不是事实,因为之前的打印行都有数字。
为了更好地理解,我将在此处复制粘贴输出的最后一行:
4
4
3
4
4
2
5
7
6
5
Average = 0
我如何更改代码以获取整列的平均字母作为输出?
非常感谢您的时间和帮助:)
答案 0 :(得分:2)
在输出中,我获得了每行的总长度,但它不计算平均长度,输出仅显示“ Average = 0”,这不可能,因为之前的打印行具有数字。
因为您没有在sum
中添加列的长度。改为这样:
awk -F'\t' '{
print length($8)
sum += length($8)
}
END {
print "Average =", sum/NR
}' file
答案 1 :(得分:0)
在sum
节中初始化一个BEGIN
变量,并在每次迭代时累积一列的长度。
我没有您的原始文件,所以我对/etc/passwd
文件的第一列做了类似的练习:
awk -F':' 'BEGIN{sum=0} {sum += length($1); print length($1)} END{print "Average = " sum/NR}' /etc/passwd