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结果的第四列)相加,显示为“总计”
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…
;这是期望的结果吗?