我正在尝试创建将根据某种模式过滤输入文件的AWK脚本,并使用strftime()函数进行一些计算。
($2 ~ /^[HB]/ && $2 ~ /n$/){
print strftime("%Y")
}
使用中的翻译是mawk。 使用此命令触发此脚本时:
awk -f script3 inputFile
我收到错误:“函数strftime从未定义过”
答案 0 :(得分:12)
安装GAWK会为你提供你在awk中原生丢失的函数strftime。
使用Ubuntu 11.10或simiar发行版,您可以发出以下命令来获取GAWK
sudo apt-get install gawk
你也可以在gawk中使用它,但是你不必使用它,并且可以简单地继续使用原始的awk脚本。
答案 1 :(得分:3)
嗯,显然,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开头并以其结尾的名称 ñ。另外,我必须计算每个过滤学生的年龄并找出答案 整个群体的平均年龄。
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