awk + ​​2番目のフィールドが時間:分:秒に一致する場合のみ行を印刷します

awk + ​​2番目のフィールドが時間:分:秒に一致する場合のみ行を印刷します

ログファイルは次のようになります

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

関連情報