Shell Awk脚本else语句不工作
我正在一个shell脚本中编写一个awk脚本,以显示当前月份的所有登录,以及到目前为止每月每天的登录数。我必须确定登录次数最多的那一天,但首先我想弄清楚如何编写if语句的else语句,该语句如下代码所示:Shell Awk脚本else语句不工作,shell,unix,if-statement,awk,Shell,Unix,If Statement,Awk,我正在一个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;
#!/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。
与
500万美元
我检查当前行是否为当前月份,然后
$6=d
检查是否仍然是同一天。如果是这样,那么计数器将增加,我将打印当前的每日登录数。我想将计数器的值保存到else语句中的关联数组中,并在遇到新的一天时(当$6不再=d时),将计数器变量也设置回零
我试图将这些操作添加到else语句中,但当我阅读脚本时,它无法识别“else”。它将只打印今天(4月23日)的登录并计算行数,但不会执行else部分。为什么不起作用
编辑:
我认为比较表达式与大多数语言中的表达式完全相同,我已经更正了它,但它不会打印当天的所有行。如果您的条件不正确:-
if ($6 =d)
应该是:-
if ($6 == "$d")
如果您的情况不正确:-
if ($6 =d)
应该是:-
if ($6 == "$d")
这应该更有效
$ last |
awk -v d="$(date +'%b')" '$5==d{day[$6]++}
END {for(k in day) print d, k, day[k]}' |
sort -k2n
这应该更有效
$ last |
awk -v d="$(date +'%b')" '$5==d{day[$6]++}
END {for(k in day) print d, k, day[k]}' |
sort -k2n
哦,我认为awk对比较运算符有不同的语法。但现在它不会打印$6等于变量“d”值的所有行。哦,我认为awk对比较运算符有不同的语法。但现在它不会打印$6等于变量“d”值的所有行。