所以我很失落,因为我错过了一个星期并且正在追赶,但是我要写一个awk程序来分辨两个日期之间的差异。
我或多或少已经完成了它,但如果用户在进行数据验证时输入01/01 / YYYY则不喜欢它。我将3个字段从arg中拉出来,然后将它们传递给函数进行验证。
在我的验证中,给我带来麻烦的部分是:if ( day > Days[month] ){
invalid stuff here
}
其中Days[]
是一个数组,其中[1] = 31,[2] = 28(如果是跳跃则为29)等。
它命中,因为没有定义Days [01]。我可以通过将[01]定义为与[1]相同而我可以绕过它,但我宁愿更优雅。
如何在awk程序中删除变量月份的前导零?我发现的所有内容都是在shell脚本中使用并调用awk,但这对我没有帮助。
感谢您的帮助!
答案 0 :(得分:7)
另一种选择:
$ echo 01234 | awk '{x=$0+0;print x}'
1234
答案 1 :(得分:5)
你需要这个,假设你的变量叫month
:
gsub ("^0*", "", month);
^
是起始锚点,0*
表示零个或多个0
个字符。因此,这有效地删除了变量开头的所有0
个字符。
作为示例(也显示了对中间数字执行此操作的方法,在将日期拆分之前,请参阅第二个gsub
:
pax> echo '1/1/2013
03/12/2014
02/02/1965' | awk '{gsub ("^0*", "", $0); gsub ("/0*", "/", $0); print}'
1/1/2013
3/12/2014
2/2/1965
答案 2 :(得分:1)
我尝试了@paxdiablo建议的答案。它最终还剥离了非前导零。
$ echo '20/02/1965' | awk '{gsub ("^0*", "", $0); gsub ("/0*", "/", $0); print}'
2/2/1965
使用sub
代替gsub
对我来说很好。
$ echo '20/02/1965' | awk '{sub ("^0*", "", $0); sub ("/0*", "/", $0); print}'
20/2/1965
答案 3 :(得分:0)
对不起我的回答不是关于awk,而是关于bash本身。所以请不要给我的评论减去)
echo -e "00000000" | sed -r 's/^[0]*$/0/g' | sed -r 's/^0[0]+//g'
或使用(())表示法执行整数计算
echo $((0000))
答案 4 :(得分:0)
最近的贡献有所缩短。
echo '20/02/1965' | awk '{sub ("/0", "/", $0)}1'
20/2/1965