我正在使用一个日志文件,其中包含如下所示的条目:
$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
五郎的回答很好。只是为了确保测试之间的数字()
可以填充空间
awk -F '[ \t(]+' '$5 > 600' file