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 に答える