awk - 狂欢 : Finding average of entries from multiple columns after reading a CSV text file

标签 awk

我正在尝试读取一个 CSV 文本文件,并找出以偶数 (2,4,6,...) 结尾的所有用户 ID(第 2 列)每周花费的平均小时数(第 3 列到第 7 列)。

输入示例如下:

Computer ID,User ID,M,T,W,T,F
Computer1,User3,5,7,3,5,2
Computer2,User5,8,8,8,8,8
Computer3,User4,0,8,0,8,4
Computer4,User1,5,4,5,5,8
Computer5,User2,9,8,10,0,0
Computer6,User7,4,7,8,2,5
Computer7,User6,8,8,8,0,0
Computer8,User9,5,2,0,6,8
Computer9,User8,2,5,7,3,6
Computer10,User10,8,9,9,9,10

我写了下面的脚本:

awk -F, '$2~/[24680]$/{for(i=3;i<=7;i++){a+=$i};printf "%s\t%.2g\n",$2,a/5;a=0}' user-list.txt > superuser.txt

这个脚本的输出是:

User4   4
User2   5.4
User6   4.8
User8   4.6
User10  9

但是,我想将脚本更改为只为所有以偶数结尾的用户 ID 打印一个平均值。

所需的输出如下(从技术上讲,这是以偶数结尾的 ID 的所有小时数的平均值):

5.56

如有任何帮助,我们将不胜感激。

TIA

最佳答案

尝试在此处修复 OP 的尝试,并添加逻辑以在最后一次读取文件时获取平均值。写在手机上,所以无法测试它应该工作以防我通过 OP 的描述得到正确的想法。

awk -F, '
$2~/[24680]$/{
  count++
  for(i=3;i<=7;i++){
    sum+=$i
  }
  tot+=sum/5
  sum=0
}
END{
  print "Average of averages is: " (count?tot/count:"NaN")
}
' user-list.txt > superuser.txt

关于awk - 狂欢 : Finding average of entries from multiple columns after reading a CSV text file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64937094/

相关文章:

awk - 将第二个和第三个替换为 .如果它是 0

awk - 最佳 awk 命令

linux - 如何从多列中剪切字符范围

linux - 正则表达式匹配 IP 地址但忽略本地主机

awk - 使用 awk 从文件中提取段

regex - 如何对未知(但重复)的词进行分组以创建索引?

shell - 如何在没有 eval 的情况下更正这个 awk 代码?

shell - 如何找到连续的空白行并将其转换为一个

linux - 删除csv文件中的空行

sed - 删除最后一个空白行