创建awk程序以添加数据的最后一列

NightBeezy

我试图创建awk程序以添加最后一列数据(连接用户的时间),同时使格式仍然可读(小时数不超过24,分钟数不超过60。)但是第一行-不显示时间,生病时必须忽略它。

jms68988 pts/0 161.6.5.14 Fri Mar 22 08:41 still logged in
jms68988 pts/4 ip143-84.snl.wku Wed Mar 20 10:15 - 11:14 (00:58)
jms68988 pts/0 161.6.5.14 Wed Mar 20 09:59 - 07:44 (1+21:45)
jms68988 pts/0 161.6.5.14 Wed Mar 20 09:18 - 09:30 (00:11)   
jms68988 pts/3 ip143-84.snl.wku Mon Mar 18 10:18 - 11:13 (00:55)   
jms68988 pts/6 ip143-84.snl.wku Fri Mar 15 10:15 - 11:14 (00:59)
jms68988 pts/6 ip143-84.snl.wku Wed Mar 13 10:16 - 11:13 (00:57)   
jms68988 pts/1 161.6.5.14 Wed Mar 13 10:05 - 07:47 (4+21:41)
jms68988 pts/0 161.6.5.14 Fri Jan 25 12:42 - 07:57 (2+19:14)
jms68988 pts/7 ip143-84.snl.wku Fri Jan 25 10:28 - 11:16 (00:47)
jms68988 pts/0 161.6.5.14 Fri Jan 25 08:33 - 08:35 (00:01)  

你能用awk做这样的事情吗?

紫罗兰色

您可以-中很多类似的事情awk-需要考虑两个基本方面:

  • 记录选择;
  • 记录处理。

第一个(记录选择)是通过在每一行上查找特定的正则表达式来完成的,下面的代码为您的输入数据选择最可能的情况,特别是最后一个字段匹配:

(<days>+<hours>:<minutes>)

其中<days>+可选,三个字段为数字,并且字段后面有可选空格。这样会丢掉第一行,最后一行是in显然,如果您的数据可以采用不同的形式,则需要对此进行调整。


第二步(记录处理)涉及计算由所选每个记录的最终字段表示的实际时间。您可以通过将字符串分成三个部分,将它们转换为通用的基础值(分钟,每天1440分钟,每小时60分钟),然后在整个选定记录集中累积该值来实现。


然后,最后将这些分钟转换回几天,几小时和几分钟,然后输出结果。

这是一个执行此操作的awk脚本prog.awk

/\(([0-9]+\+)?[0-9]+:[0-9]+\) *$/ {
    # Split field on ALL puctuation, this puts empty string
    # on either side, so one of:
    #      1        2          3            4          5
    #   <empty> ( <days>  + <hours>   : <minutes> ) <empty>
    #   <empty> ( <hours> : <minutes> ) <empty>
    # Once we know which one it is, we just extract to the
    # correct variables.

    sz = split($NF, tmArray, /[()+:]/)
    if (sz == 5) {
        dd = tmArray[2] + 0
        hh = tmArray[3] + 0
        mm = tmArray[4] + 0
    } else {
        dd = 0
        hh = tmArray[2] + 0
        mm = tmArray[3] + 0
    }

    # Output line for debugging.

    printf "%3dd %3dh %3dm %s\n", dd, hh, mm, $NF

    # Accumulate minutes.

    total += dd * 1440 + hh * 60 + mm
}
END {
    # After all records, convert minutes back to
    # dd/hh/mm and print.

    dd = int(total / 1440)
    left = total % 1440

    hh = int(left / 60)
    mm = left % 60

    printf "=====\n%3dd %3dh %3dm (from %dm)\n", dd, hh, mm, total
}

value = something + 0顺便说一句,如果您担心我对诸如之类的代码的理智,这只是一种强制awk将变量视为数字值而不是字符串的方法。

在输入数据上运行时,prog.input可以看到结果:

pax> awk -f prog.awk prog.input
  0d   0h  58m (00:58)
  1d  21h  45m (1+21:45)
  0d   0h  11m (00:11)   
  0d   0h  55m (00:55)   
  0d   0h  59m (00:59)
  0d   0h  57m (00:57)   
  4d  21h  41m (4+21:41)
  2d  19h  14m (2+19:14)
  0d   0h  47m (00:47)
  0d   0h   1m (00:01)  
=====
  9d  19h  28m (from 14128m)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

awk脚本在一列中添加数字

来自分类Dev

awk:删除第一列,并在最后一列之后添加四列

来自分类Dev

AWK / SED在索引数据中添加一列

来自分类Dev

添加一列数据

来自分类Dev

熊猫;通过划分大数据帧的最后一列来创建新列

来自分类Dev

如何根据另一列中的数字在一列中添加数字

来自分类Dev

如何将数据添加到dataGridView1的最后一行/最后一列?

来自分类Dev

AWK-打印最后一列;如果最后一个为空,则打印最后一列

来自分类Dev

awk将最后一列放在新行中

来自分类Dev

AWK-打印最后一列以及空值

来自分类Dev

如何自动在第一行中添加数字并在第一列中添加数字

来自分类Dev

使用AWK获取最后一个数据列以创建线点gnuplot

来自分类Dev

使用AWK获取最后一个数据列以创建线点gnuplot

来自分类Dev

如何删除熊猫数据框的最后一列数据

来自分类Dev

如何删除熊猫数据框的最后一列数据

来自分类Dev

在数据框上添加一列

来自分类Dev

如何在表的第一列和最后一列之间动态添加列

来自分类Dev

从一列数据创建类别

来自分类Dev

从最后一列向动态树添加大小

来自分类Dev

引导程序-行最后一列末尾的间距很小

来自分类Dev

连接列并添加数字awk

来自分类Dev

如何在包含特定字符串的最后一列之后添加一列?

来自分类Dev

AWK每隔一列打印一次,从最后一列(和最后一列旁边)开始进行N次交互(从右到左打印)

来自分类Dev

替换数据最后一列中的数字

来自分类Dev

查找范围内充满数据的最后一列

来自分类Dev

如何修复响应数据表的最后一列

来自分类Dev

根据最后一列对数据进行排序

来自分类Dev

如何复制数据透视表的第一列和最后一列的值?

来自分类Dev

从不同文件追加数组,并在数据中插入一列

Related 相关文章

  1. 1

    awk脚本在一列中添加数字

  2. 2

    awk:删除第一列,并在最后一列之后添加四列

  3. 3

    AWK / SED在索引数据中添加一列

  4. 4

    添加一列数据

  5. 5

    熊猫;通过划分大数据帧的最后一列来创建新列

  6. 6

    如何根据另一列中的数字在一列中添加数字

  7. 7

    如何将数据添加到dataGridView1的最后一行/最后一列?

  8. 8

    AWK-打印最后一列;如果最后一个为空,则打印最后一列

  9. 9

    awk将最后一列放在新行中

  10. 10

    AWK-打印最后一列以及空值

  11. 11

    如何自动在第一行中添加数字并在第一列中添加数字

  12. 12

    使用AWK获取最后一个数据列以创建线点gnuplot

  13. 13

    使用AWK获取最后一个数据列以创建线点gnuplot

  14. 14

    如何删除熊猫数据框的最后一列数据

  15. 15

    如何删除熊猫数据框的最后一列数据

  16. 16

    在数据框上添加一列

  17. 17

    如何在表的第一列和最后一列之间动态添加列

  18. 18

    从一列数据创建类别

  19. 19

    从最后一列向动态树添加大小

  20. 20

    引导程序-行最后一列末尾的间距很小

  21. 21

    连接列并添加数字awk

  22. 22

    如何在包含特定字符串的最后一列之后添加一列?

  23. 23

    AWK每隔一列打印一次,从最后一列(和最后一列旁边)开始进行N次交互(从右到左打印)

  24. 24

    替换数据最后一列中的数字

  25. 25

    查找范围内充满数据的最后一列

  26. 26

    如何修复响应数据表的最后一列

  27. 27

    根据最后一列对数据进行排序

  28. 28

    如何复制数据透视表的第一列和最后一列的值?

  29. 29

    从不同文件追加数组,并在数据中插入一列

热门标签

归档