【问题标题】:Awk script else statement not workingawk 脚本 else 语句不起作用
【发布时间】: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 部分。为什么它不起作用?

编辑:

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

【问题讨论】:

标签: shell unix if-statement awk


【解决方案1】:

你的 if 条件不正确:-

if ($6 =d)

应该是:-

if ($6 == "$d")

【讨论】:

    【解决方案2】:

    这应该会更好

    $ last | 
      awk -v d="$(date +'%b')" '$5==d{day[$6]++} 
                                END  {for(k in day) print d, k, day[k]}' | 
      sort -k2n
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-09
      • 2023-03-13
      • 2015-05-05
      • 1970-01-01
      • 1970-01-01
      • 2022-01-16
      • 2014-09-15
      • 1970-01-01
      相关资源
      最近更新 更多