
私は次のエントリを含むログファイルで作業しています。
$Hostname1: 0x7FDBF4B1AB10 ( 23698) waiting 100 seconds, NSDThread: for I/O completion on disk vd4
$Hostname2: 0x7F2D10A2F8C0 ( 25393) waiting 200 seconds, NSDThread: for I/O completion on disk vd35
$Hostname3: 0x7F2D109F4290 ( 25343) waiting 900 seconds, NSDThread: for I/O completion on disk vd11
$Hostname4: 0x7FDBF4B1AB30 ( 23698) waiting 100 seconds, NSDThread: for I/O completion on disk vd40
$Hostname5: 0x7F2D10A2F830 ( 25392) waiting 750 seconds, NSDThread: for I/O completion on disk vd13
$Hostname6: 0x7F2D109F4240 ( 25342) waiting 500 seconds, NSDThread: for I/O completion on disk vd14
待ち時間が任意の値(600秒など)より大きい行をフィルタリングしたいと思います。 Bashでこれを行う最善の方法は何ですか?
答え1
これはawk
あなたが望むものを得るでしょう。
awk '$6 > 600 { print }' file
$Hostname3: 0x7F2D109F4290 ( 25343) waiting 900 seconds, NSDThread: for I/O completion on disk vd11
$Hostname5: 0x7F2D10A2F830 ( 25392) waiting 750 seconds, NSDThread: for I/O completion on disk vd13
または@Kusalanandaによると、これを減らすことで十分です。
awk '$6 > 600 ' file
答え2
Goroの答えはとても良いです。テスト間の数字が()
スペースを埋めることができるかどうかを確認する
awk -F '[ \t(]+' '$5 > 600' file