在mawk中使用strftime函数
我正在尝试创建 AWK 脚本,该脚本将根据某种模式过滤输入文件,并使用 strftime() 函数进行一些计算。
($2 ~ /^[HB]/ && $2 ~ /n$/){
print strftime("%Y")
}
使用的解释器是mawk。 使用此命令触发此脚本时:
awk -f script3 inputFile
我收到错误:“函数 strftime 从未定义”
I'm trying to create AWK script that will filter the input file according to some pattern, and use the strftime() function for some calculations.
($2 ~ /^[HB]/ && $2 ~ /n$/){
print strftime("%Y")
}
The interpreter in use is mawk.
When triggering this script using this command:
awk -f script3 inputFile
I'm getting the error: "function strftime never defined"
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
安装 GAWK 将使您恢复在 awk 中本机缺少的函数 strftime。
使用 Ubuntu 11.10 或类似发行版,您将发出以下命令来获取 GAWK
sudo apt-get install gawk
您也可以在 gawk 中使用它,但您不必这样做,只需继续使用原始版本即可awk 脚本。
Installing GAWK will get you the function strftime back that you are missing natively in awk.
With Ubuntu 11.10 or simiar distribution you would issue following command to get the GAWK
sudo apt-get install gawk
You can also use it in gawk however you don't have to and can simply go ahead with your original awk script.
好吧,显然, mawk 没有strftime 函数。
我这里没有 mawk,所以未经测试:
而
script
有(结合两个正则表达式:如果年份应该以某种方式来自 $0,那么您应该能够从字符串中解析它。向我们提供有关您的编辑的更多详细信息
。
Well, clearly, mawk does not have a strftime function.
I don't have mawk here, so untested:
and
script
has (combining the two regular expressions:If the year should come from $0 somehow, then you should be able to parse it out of the string. Give us more details about your input.
EDIT
您可以构建自己的日期实用程序包装器来提取所有组件。从那里,你可以按照你喜欢的方式进行制作:
在这里,我还添加了一个功能来自动检测它是
BSD-date
还是GNU-date
。根据您在系统中的命名方式进行相应调整。这样,您就不需要进行一堆迄今为止的调用 - 只需调用一次,然后提取您认为合适的组件。
如果您想将单行概念发挥到极致,请将所有内容放入 sprintf() 语句中,如下所示:
you can build your own date utility wrapper to extract out all the components. from there, you can make it however you like it :
Here I've made it also added in a feature to auto detect whether it's
BSD-date
orGNU-date
. Adjust it accordingly to how you name it in your system.This way you don't need to make a stack of calls to date - just call it once, and extract the components as you see fit.
And if you like to take one-liner concept to the extreme, then put everything inside a sprintf() statement like this :