【发布时间】:2018-04-24 05:15:05
【问题描述】:
我正在 shell 脚本中编写一个 awk 脚本,以显示当前月份的所有登录,以及迄今为止该月每天的登录次数。我必须确定登录次数最多的那一天,但首先我想弄清楚如何编写 if 语句的 else 语句,下面的代码如下:
#!/bin/bash
month=$(date +"%b")
day=$(date +"%e")
last | awk -v m=$month -v d=$day 'BEGIN{
max=0; c=0; maxd=day}
($5 ~ m) {
if ($6 =d) {print; c++; print c}
else {printf("Else statement test")}
}
'
到目前为止,如果没有包含 else 语句的行,它可以正常工作,但是无论我添加什么,它似乎都无法识别 else。 与
$5 ~ 米
我检查当前行是否是当月的,然后
$6 =d
检查它是否仍然是同一天。如果是这样,那么计数器会增加,并且我会打印当前的每日登录次数。我想将计数器的值保存到 else 语句中的关联数组中,并在遇到新的一天时也将计数器变量设置回零(当 $6 不再 =d 时)。
我尝试将这些操作添加到 else 语句中,但是当我阅读脚本时,它无法识别“else”。它只会打印今天(4 月 23 日)的登录信息并计算行数,但不会执行 else 部分。为什么它不起作用?
编辑:
我认为比较表达式与大多数语言的比较表达式相同,我已对其进行了更正,但它不会打印当天的所有行。
【问题讨论】:
-
哦,我以为 awk 对比较运算符有不同的语法。但现在它不会打印 $6 等于变量 'd' 的值的所有行。
标签: shell unix if-statement awk