Shell Awk脚本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;

我正在一个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。 与

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”值的所有行。