Das informações abaixo:
$ cat access.dat
2025/01/01T10:00:01 "GET" /path/resource/api1 User1 500
2025/01/01T10:00:01 "DELETE" /path/resource/api1 User1 503
2025/01/01T04:00:01 "GET" /path/resource/api1 User1 500
2025/01/01T03:00:01 "GET" /path/resource/api1 User1 503
2025/01/01T05:00:01 "PUT" /path/resource/api1 User2 500
2025/01/01T06:00:01 "GET" /path/resource/api1 User1 200
2025/01/01T07:00:01 "GET" /path/resource/api1 User1 201
2025/01/01T08:00:01 "GET" /path/resource/api2 User1 500
2025/01/01T09:00:01 "POST" /path/resource/api2 User2 500
2025/01/01T10:00:01 "POST" /path/resource/api2 User1 400
2025/01/01T11:00:01 "GET" /path/resource/api2 User2 404
Estou tentando gerar um script awk com a instrução if else. Ao fazer isso
cat access.dat | awk '{if ($NF>=400) {print $0}} > failure.dat
o arquivo de saída é gerado com sucesso. Mas ao adicionar
cat access.dat | awk '{if ($NF>=400) {print $0} > failure.dat else {print$0} > success.dat}
está marcando erro. O que está errado no meu script awk? Como eu poderia gerar tanto failure.dat quanto success.dat dentro da instrução if/else?
Obrigado pela ajuda.
Você precisa colocar os nomes dos arquivos entre aspas para evitar
awk
tratá-los como variáveis:e você precisa fazer o redirecionamento dentro das chaves.
Você também pode encurtá-lo usando o operador ternário:
(O parêntesis externo é necessário em algumas
awk
implementações).Ainda mais claro:
Sua sintaxe é estranha. Não entendo por que você tem o
>
outside the{ }
block. Esta é uma maneira mais natural (na minha opinião, pelo menos) de escrever:Ou, um pouco mais claramente:
E, só por diversão, de forma menos clara, mas mais concisa: