저는 다음과 같은 항목이 포함된 로그 파일로 작업하고 있습니다.
$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