awk脚本其他声明不起作用

时间:2018-04-23 20:48:53

标签: 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; c++; print c}
 else {printf("Else statement test")}
 }
'

到目前为止,如果没有包含else语句的行,它可以正常工作,但无论我添加什么内容,它似乎都无法识别其他内容。 与

  

$ 5~m

我检查当前行是否是当月,然后是

  

$ 6 = d

检查它是否仍在同一天。如果是,则计数器增加,并打印当前的每日登录次数。我想将计数器的值保存到else语句中的关联数组中,并且当我遇到新的一天时(当$ 6不再是= d时)也将计数器变量设置回零。

我试图将这些操作添加到else语句中,但是当我阅读脚本时,它不会识别" else"。它只打印今天(4月23日)的登录并计算行数,但不会执行else部分。为什么它不起作用?

编辑:

我认为比较表达式与大多数语言的表达式相同,我已经对其进行了更正,但它不会从当天打印所有行。

2 个答案:

答案 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