Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 使用awk汇总数据并对输出进行排序,然后对列的结果求和_Unix_Ksh_Aix - Fatal编程技术网

Unix 使用awk汇总数据并对输出进行排序,然后对列的结果求和

Unix 使用awk汇总数据并对输出进行排序,然后对列的结果求和,unix,ksh,aix,Unix,Ksh,Aix,日志文件的原始数据: Data1 12:00 Sep 28 COUNT= 100 Data1 12:00 Sep 30 COUNT= 8 Data1 12:00 Oct 02 COUNT= 4 Data1 12:00 Oct 01 COUNT= 3 Data1 12:00 Oct 05 COUNT= 4 Data1 12:00 Oct 01 COUNT= 3 Data1 12:00 Sep 29 COUNT= 5 Data1 12:00 Sep 2

日志文件的原始数据:

   Data1 12:00 Sep 28 COUNT= 100
   Data1 12:00 Sep 30 COUNT= 8
   Data1 12:00 Oct 02 COUNT= 4
   Data1 12:00 Oct 01 COUNT= 3
   Data1 12:00 Oct 05 COUNT= 4
   Data1 12:00 Oct 01 COUNT= 3
   Data1 12:00 Sep 29 COUNT= 5
   Data1 12:00 Sep 29 COUNT= 5
代码:

grep "Data1" $LOGFILE | awk '{print $3,$4,$5,$6|"sort -k1,1r -k2,2 -u"}' | awk '{sum+=$4} {print "\t"$1,$2,$3,$4} END {print "\t\tTotal=","\033[44m"sum"\033[m"}'
结果:

    Sep 28 COUNT= 100
    Sep 29 COUNT= 5
    Sep 30 COUNT= 8
    Oct 01 COUNT= 3
    Oct 02 COUNT= 4
    Oct 05 COUNT= 4
           Total= 124
此代码有3个功能:

  • 搜索包含Data1记录的任何行以获取第3、第4、第5和第6列(日志文件的列)
  • 然后按结果的第一列(-k1,1)和正常情况下按结果的第二列(-k2,2)反向(r)排序,并排除任何重复(-u)
  • 然后将结果的最后一列(awk结果的第四列)相加,显示为“总计”
有没有更好的方法来编写此代码?

编辑1:

awk '/Data1/{print $3,$4,$5,$6|"sort -k1,1r -k2,2 -u"}' $LOGFILE | awk '{sum+=$4} {print "\t"$1,$2,$3,$4} END {print "\t\tTotal=","\033[44m"sum"\033[m"}'

这听起来更像是一种问题?我应该把它贴在链接的位置并从这里删除吗?如果你打算贴到代码审查,那么是的。(许多人不喜欢跨站点的双重帖子)如果可以的话,我宁愿把它放在这里以帮助其他人,因为我正在搜索此代码,并从不同的帖子中粘贴它,以防有人需要确切的结果,因为我没有一个年的组成部分,按月排序将产生:
Apr,Aug,Dec,Feb…
;这是期望的结果吗?