1

如何找到大于第 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 }'

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

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

4

4 回答 4

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
于 2013-07-04T09:31:19.370 回答
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
于 2013-07-04T09:32:11.677 回答
0

改用这个:

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

所以你的命令将是:

ssh backupFiler snapvault status | awk '{split($4,a,":");if(a[1])>24{print}}'
于 2013-07-04T09:18:31.060 回答
0

您首先只选择了第 4 列awk,如果您需要整行,那么您需要以不同的方式过滤它,请考虑:

 ssh backupFiler snapvault status |perl -ne ' print if (m/\b(\d+):\d+:\d+\b/ and  $1>24)'
于 2013-07-04T09:22:45.490 回答