arquivo de log é assim
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)
queremos capturar apenas as linhas quando o segundo campo for hora:min:seg
como os seguintes resultados esperados
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
nós tentamos
cat info.txt | awk '$2 =~ [0-9][0-9]/:[0-9][0-9]:[0-9][0-9]'
mas execute com erros
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
Responder1
A sintaxe correta é
<info.txt awk '$2 ~ /^[0-9][0-9]:[0-9][0-9]:[0-9][0-9]$/'
Mudanças:
- Nenhum uso inútil de
cat
. - O operador é
~
. - O padrão precisa ser delimitado por barras (
/regex/
). ^
e$
corresponda ao início e ao fim da string correspondente (aqui$2
), respectivamente.