从以下信息可以看出:
$ 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
我正在尝试生成一个带有 if else 语句的 awk 脚本。执行时
cat access.dat | awk '{if ($NF>=400) {print $0}} > failure.dat
输出文件已成功生成。但在添加
cat access.dat | awk '{if ($NF>=400) {print $0} > failure.dat else {print$0} > success.dat}
正在标记错误。我的 awk 脚本有什么问题?我如何在 if/else 语句中生成failure.dat 和success.dat?
感谢您的帮助。
您需要引用文件名以防止
awk
将它们视为变量:并且您需要在花括号内进行重定向。
您还可以使用三元运算符来缩短它:
(在某些实现中需要外括号
awk
)。更清楚的是:
你的语法很奇怪。我不明白你为什么要在块
>
外面{ }
。这是一种更自然的(无论如何在我看来)编写方式:或者更清楚地说:
只是为了好玩,不太清楚但更简洁: