файл журнала выглядит так
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
) соответственно.