Unix Bash ...总结csv文件中的每一行,从第二个条目开始,然后从行总和

时间:2016-03-11 11:05:04

标签: bash

我创建了一个单行程序,用于汇总csv文件中的每一行,从第二个条目开始。 但我希望从行总和中找到最高的数字

示例文件输出:有数千行

03/Mar/2016:00:14,19772,7494,11293,9467
03/Mar/2016:00:15,18041,13241,9715,8968
03/Mar/2016:00:16,17441,13534,9926,9301
03/Mar/2016:00:17,17709,14243,9022,9209
03/Mar/2016:00:18,16368,13535,8761,8313
03/Mar/2016:00:19,17074,13224,8868,7789
03/Mar/2016:00:20,16783,13666,9499,8763
03/Mar/2016:00:21,16665,12962,8821,8862

示例脚本: 这是我通过计算每一行而实现的,但只需要从计算的行中找到最高的数字。有什么想法吗?

awk 'BEGIN {FS=OFS=","} {sum=0; for(i=2;i<=NF;i++) {sum+=$i}; print $0,"sum:"sum,}' /tmp/101.20160304.csv

欢呼声

2 个答案:

答案 0 :(得分:2)

awk非常有能力记住最大值。

awk -F, '
    # for every row, calculate the sum
    {sum = 0; for (i=2; i<=NF; i++) sum += $i}

    # set the max value (if the first row, initialize the max value)
    NR == 1 || sum > max {max = sum}

    END {print max}
' file

对于您的样本数据,这是最大值:

50202

答案 1 :(得分:1)

您可以将awk输出传输到:

awk_output|sort  -t':' -nrk4|head -1

这会按总和降序排序,然后选择第一行。当然你可以重写你的awk,一次性完成。