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

Unix 创建awk程序以添加最后一列数据,unix,Unix,我正在尝试创建一个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

我正在尝试创建一个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>)
顺便说一句,如果您担心我对
value=something+0
这样的代码是否明智,这只是一种迫使
awk
将变量视为数值而不是字符串的方法

当您在输入数据上运行该程序时,您可以看到以下结果:

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)
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)