awk + 두 번째 필드가 시간:분:초와 일치하는 경우에만 줄 인쇄

awk + 두 번째 필드가 시간:분:초와 일치하는 경우에만 줄 인쇄

로그 파일은 다음과 같습니다

34.3.23.58  07:20:01  AM                          all     0.02        0.00      0.02     0.00     0.00    99.97
34.3.23.58  07:30:01  AM                          all     0.02        0.00      0.02     0.00     0.00    99.97
34.3.23.58  07:40:01  AM                          all     0.02        0.00      0.02     0.00     0.00    99.97
34.3.23.58  Average:  all                         0.02    0.00        0.02      0.00     0.00     99.96
34.3.23.60  Linux     3.10.0-514.26.2.el7.x86_64  (dns)  09/25/2019  _x86_64_  (4       CPU)

두 번째 필드가 시:분:초인 경우에만 라인을 캡처하려고 합니다.

다음과 같은 예상 결과로

cat info.txt 

34.3.23.58  07:20:01  AM                          all     0.02        0.00      0.02     0.00     0.00    99.97
34.3.23.58  07:30:01  AM                          all     0.02        0.00      0.02     0.00     0.00    99.97
34.3.23.58  07:40:01  AM                          all     0.02        0.00      0.02     0.00     0.00    99.97

우리는 노력한다

cat info.txt | awk '$2 =~ [0-9][0-9]/:[0-9][0-9]:[0-9][0-9]'

하지만 오류가 발생하면서 실행됨

awk: cmd. line:1: $2 =~ [0-9][0-9]/:[0-9][0-9]:[0-9][0-9]
awk: cmd. line:1:     ^ syntax error
awk: cmd. line:1: $2 =~ [0-9][0-9]/:[0-9][0-9]:[0-9][0-9]
awk: cmd. line:1:           ^ syntax error
awk: cmd. line:1: $2 =~ [0-9][0-9]/:[0-9][0-9]:[0-9][0-9]
awk: cmd. line:1:                ^ syntax error
awk: cmd. line:1: $2 =~ [0-9][0-9]/:[0-9][0-9]:[0-9][0-9]
awk: cmd. line:1:                  ^ unterminated regexp

답변1

올바른 구문은 다음과 같습니다.

<info.txt awk '$2 ~ /^[0-9][0-9]:[0-9][0-9]:[0-9][0-9]$/'

변경사항:

  • 쓸모없는 사용은 없습니다 cat.
  • 운영자는 입니다 ~.
  • 패턴은 슬래시( )로 포함되어야 합니다 /regex/.
  • ^$일치하는 문자열(여기)의 시작과 끝을 각각 일치 시킵니다 $2.

관련 정보