微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决使用awk汇总数据并排序输出,然后对列的结果求和

LOGFILE的原始数据:

['food','fo0d','f0od']

代码

def generatePerms(newDomain):
    permutations = []
    similarities = [
                    ['i','l','!','|'],['o','0'],['e','3'],]

    for i in range(len(newDomain)):
        for similarList in similarities:
            if newDomain[i] in similarList:
                #get the substrings around the similar char
                start = newDomain[0:i]
                end = newDomain[i+1:]
                #concatenate the different possible characters and add to global list
                for chars in similarList:
                    permutations.append(start+chars+end) 
              
    return list(set(permutations))

结果:

   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

代码执行3件事:

  • 搜索包含Data1记录的任何行以获取第三,第四,第五和第六列(LOGFile的列)
  • 然后按结果的第一列(-k1,1)和通常按结果的第二列(-k2,2)对它们进行反向(r)排序,并排除任何重复(-u)
  • 然后将结果的最后一列(awk结果的第4列)求和,显示为“总计”

是否有更好的方法编写此代码

Edit1:

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"}'

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。