如何找到大于第4列的值

时间:2013-07-04 09:14:14

标签: shell

如何找到大于第4列的值并打印整行? 我的输出是存储箱的状态报告。 例如:

Source                     Destination                   State          Lag         Status
host1:SystemState          backup1:/vol/xxxxx/xxxxxx     Snapvaulted    11:24:21    Idle
host2:/vol/xxxxx/xxxxxx    backup2:/vol/xxxxx/xxxxxx     Snapvaulted    1898:58:16  Idle
host3:/vol/xxxxx/xxxxxx    backup3:/vol/xxxxx/xxxxxx     Snapvaulted    18:58:02    Idle
host4:/vol/xxxxx/xxxxxx    backup4:/vol/xxxxx/xxxxxx     Snapvaulted    19:46:24    Idle
host5:/vol/xxxxx/xxxxxxr   backup5:/vol/xxxxx/xxxxxxr    Snapvaulted    5009:22:26  Idle

我尝试过以下命令:

ssh backupFiler snapvault status | awk '{print $4}'| cut -d ':' -f 1 | awk '{ if ( $1 > 24 ) print $0 }'

  • 问题是我只获得第4列作为输出

ssh backupFiler snapvault status | awk '{ if ( $4 > 24 ) print $0 }'

  • 输出不准确,因为该列被视为字符串。

我需要输出只显示Lag大于24小时的行。

4 个答案:

答案 0 :(得分:7)

您可以这样做:

ssh backupFiler snapvault status | awk '$4+0 > 24' 

向变量添加零是一个AWK惯用法,用于将其从字符串强制转换为数值。

输出:

host2:/vol/xxxxx/xxxxxx    backup2:/vol/xxxxx/xxxxxx     Snapvaulted    1898:58:16  Idle
host5:/vol/xxxxx/xxxxxxr   backup5:/vol/xxxxx/xxxxxxr    Snapvaulted    5009:22:26  Idle

答案 1 :(得分:1)

如何将ssh输出传递给:

awk -F':|\\s*' '$6>24'

使用您当前的示例,它输出:

host2:/vol/xxxxx/xxxxxx    backup2:/vol/xxxxx/xxxxxx     Snapvaulted    1898:58:16  Idle
host5:/vol/xxxxx/xxxxxxr   backup5:/vol/xxxxx/xxxxxxr    Snapvaulted    5009:22:26  Idle

答案 2 :(得分:0)

改为使用:

awk '{split($4,a,":");if(a[1])>24{print}}'

所以你的命令将是:

ssh backupFiler snapvault status | awk '{split($4,a,":");if(a[1])>24{print}}'

答案 3 :(得分:0)

如果您需要整行,您首先只选择了第一列awk的第4列, 然后你需要以不同的方式过滤它,考虑一下:

 ssh backupFiler snapvault status |perl -ne ' print if (m/\b(\d+):\d+:\d+\b/ and  $1>24)'