在mawk中使用strftime函数

在mawk中使用strftime函数,awk,strftime,Awk,Strftime,我试图创建一个AWK脚本,它将根据某种模式过滤输入文件,并使用strftime()函数进行一些计算 ($2 ~ /^[HB]/ && $2 ~ /n$/){ print strftime("%Y") } 正在使用的口译员令人毛骨悚然。 使用此命令触发此脚本时: awk -f script3 inputFile 我得到一个错误:“函数strftime从未定义”很明显,它没有strftime函数 我这里没有伤口,所以没有经过测试: awk -f script -v

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

($2 ~ /^[HB]/ && $2 ~ /n$/){
        print strftime("%Y")
}
正在使用的口译员令人毛骨悚然。 使用此命令触发此脚本时:

awk -f script3 inputFile
我得到一个错误:“函数strftime从未定义”

很明显,它没有strftime函数

我这里没有伤口,所以没有经过测试:

awk -f script -v the_year=$(date "+%Y") inputFile
script
has(结合两个正则表达式:

$2 ~ /^[HB].*n$/ { print the_year }
如果年份以某种方式来自0美元,那么您应该能够从字符串中解析出来。请提供有关您输入的更多详细信息

编辑

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

awk-v今年=$(日期+%Y)-v今天=$(日期+%Y%m%d)'
$2~/^[BH].*n$/{
年龄=本年-6美元
如果(今天<$6$5$4){age--}我假设这些字段是生日
总年龄+=年龄
计数++
打印$2“是“年龄”岁”
}
结束{
打印“平均年龄=”总年龄/计数
}
'输入文件

安装GAWK将使您返回awk中本机缺少的strftime函数

在Ubuntu11.10或simiar发行版中,您可以发出以下命令来获得GAWK

sudo-apt-get-install-gawk


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

嗨,Glenn,输入由以下几行组成:“12768 Ashwari F 20 11 1985”.基本上,我必须过滤所有名字以
B
H
开头,以
n
结尾的学生。此外,我还必须计算每个被过滤学生的年龄,并找出整个组的平均年龄。干杯,阿里尔。这是一个好主意,在某些情况下有效。但有时你需要重复时间tamp呼叫,例如,记录消息,在这种情况下没有帮助。我为自己做了这项工作。谢谢You@Ariel:如果这对你也适用,请将其标记为正确答案
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