【问题标题】:Using strftime function in mawk在 mawk 中使用 strftime 函数
【发布时间】:2011-04-10 16:44:49
【问题描述】:

我正在尝试创建 AWK 脚本,该脚本将根据某种模式过滤输入文件,并使用 strftime() 函数进行一些计算。

($2 ~ /^[HB]/ && $2 ~ /n$/){
        print strftime("%Y")
}

使用的解释器是 mawk。 使用此命令触发此脚本时:

awk -f script3 inputFile

我收到错误:“函数 strftime 从未定义”

【问题讨论】:

    标签: awk strftime


    【解决方案1】:

    安装 GAWK 将使您恢复原来在 awk 中缺少的函数 strftime。

    使用 Ubuntu 11.10 或类似发行版,您将发出以下命令来获取 GAWK

    sudo apt-get install gawk

    您也可以在 gawk 中使用它,但您不必这样做,只需继续使用您原来的 awk 脚本即可。

    【讨论】:

    • 我为我完成了这项工作。谢谢
    • @Ariel:如果这对您也有用,请将此标记为正确答案
    【解决方案2】:

    嗯,很明显,mawk 没有 strftime 函数。

    我这里没有 mawk,所以未经测试:

    awk -f script -v the_year=$(date "+%Y") inputFile
    

    script有(结合两个正则表达式:

    $2 ~ /^[HB].*n$/ { print the_year }
    

    如果年份应该以某种方式来自 $0,那么您应该能够将它从字符串中解析出来。向我们提供有关您的意见的更多详细信息。

    编辑

    输入由几行组成,如下所示:“12768 Ashwari F 20 11 1985”。 基本上我必须过滤所有名称以 B 或 H 开头并以 n.此外,我必须计算每个过滤学生的年龄并找出 整个组的平均年龄。

    awk -v this_year=$(date +%Y) -v today=$(date +%Y%m%d) '
        $2 ~ /^[BH].*n$/ {
            age = this_year - $6
            if (today < $6 $5 $4) { age-- } # I assume those fields are the birthday 
            total_age += age
            count ++
            print $2 " is " age " years old"
        }
        END {
            print "average age = " total_age/count
        }
    ' inputFile
    

    【讨论】:

    • 嗨,格伦,输入由几行组成,如下所示:“12768 Ashwari F 20 11 1985”。基本上我必须过滤所有名称以BH 开头并以n 结尾的人。此外,我必须计算每个过滤学生的年龄并找出整个组的平均年龄。干杯,爱丽儿。
    • 这是一个好主意,并且在某些情况下有效。但有时您需要重复时间戳调用,例如,对于日志消息,在这种情况下它没有帮助。
    猜你喜欢
    • 2012-08-24
    • 1970-01-01
    • 1970-01-01
    • 2012-09-15
    • 1970-01-01
    • 2022-09-27
    • 1970-01-01
    • 2019-03-08
    • 2019-05-11
    相关资源
    最近更新 更多