Awk 计算柱的平均长度

Awk 计算柱的平均长度,awk,Awk,我有一个任务,我必须用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 我需要如何更改代码以获得整个列的平均字母作为输出 (非

我有一个任务,我必须用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,这不可能,因为之前打印的行都有数字

因为您没有将列的长度添加到
sum
。改为这样做:

awk -F'\t' '{
  print length($8)
  sum += length($8)
}
END {
  print "Average =", sum/NR
}' file
在输出中,我得到了每一行的总长度,但它没有计算平均长度,输出只是表示平均值=0,这不可能,因为之前打印的行都有数字

因为您没有将列的长度添加到
sum
。改为这样做:

awk -F'\t' '{
  print length($8)
  sum += length($8)
}
END {
  print "Average =", sum/NR
}' file

BEGIN
部分初始化
sum
变量,并在每次迭代时累积列的长度

我没有您的原始文件,因此我对我的
/etc/passwd
文件的第1列做了类似的练习:

awk -F':' 'BEGIN{sum=0} {sum += length($1); print length($1)} END{print "Average = " sum/NR}' /etc/passwd

BEGIN
部分初始化
sum
变量,并在每次迭代时累积列的长度

我没有您的原始文件,因此我对我的
/etc/passwd
文件的第1列做了类似的练习:

awk -F':' 'BEGIN{sum=0} {sum += length($1); print length($1)} END{print "Average = " sum/NR}' /etc/passwd

在哪里向变量sum添加值?我以为sum会自动获取我之前打印的长度值。所以我必须手动给出sum的长度值?如果是,我该怎么做?这是否回答了你的问题?在哪里向变量sum添加值?我以为sum会自动获取我之前打印的长度值。所以我必须手动给出sum的长度值?如果是,我该怎么做?这是否回答了你的问题?如果输入文件为空,则将
sum/NR
更改为
(NR?sum/NR:0)
或类似操作以避免被零除错误。如果输入文件为空,则将
sum/NR
更改为
(NR?sum/NR:0)
或类似操作以避免被零除错误。