我正在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语句的行,它可以正常工作,但无论我添加什么内容,它似乎都无法识别其他内容。 与
$ 5~m
我检查当前行是否是当月,然后是
$ 6 = d
检查它是否仍在同一天。如果是,则计数器增加,并打印当前的每日登录次数。我想将计数器的值保存到else语句中的关联数组中,并且当我遇到新的一天时(当$ 6不再是= d时)也将计数器变量设置回零。
我试图将这些操作添加到else语句中,但是当我阅读脚本时,它不会识别" else"。它只打印今天(4月23日)的登录并计算行数,但不会执行else部分。为什么它不起作用?
编辑:
我认为比较表达式与大多数语言的表达式相同,我已经对其进行了更正,但它不会从当天打印所有行。
答案 0 :(得分:2)
你的if条件不正确: -
if ($6 =d)
应该是: -
if ($6 == "$d")
答案 1 :(得分:0)
这应该会更好用
$ last |
awk -v d="$(date +'%b')" '$5==d{day[$6]++}
END {for(k in day) print d, k, day[k]}' |
sort -k2n