我必须将一个月的日期从1到9替换为01到09.我是根据以下代码完成的
echo "1"|awk '{gsub('1',"01")}1'
echo "2"|awk '{gsub('2',"02")}1'
但现在所有其他日子如10,11都被替换为010,011 请指导我如何编写它,以便只有一位数的天数以0为前缀。谢谢
答案 0 :(得分:3)
而不是gsub()
,printf
是您要查找的功能,请参阅示例:
kent$ seq 12|awk '{printf "%02d\n", $0}'
01
02
03
04
05
06
07
08
09
10
11
12
答案 1 :(得分:1)
您可以使用gawk
吗?
echo "1 2 11 21" | gawk '{gsub(/\y[0-9]\y/,"0&")}1'
01 02 11 21
使用gawk中的单词边界正则表达式。更多here
评论示例:
$ cat file1
Date: Sep 5 2017
Date: Sep 15 2017
Some other line
$ cat file1 | gawk '/^Date:/ { gsub(/\y[0-9]\y/,"0&",$3); sub(/Sep/,"09",$2); print "EndDate "$4$2$3 }'
EndDate 20170905
EndDate 20170915
答案 2 :(得分:0)
在bash最新版本中,您可以使用
echo {01..12}
<强>输出强>
01 02 03 04 05 06 07 08 09 10 11 12
另一种选择是在seq
中使用格式说明符。
seq -f "%02g" 12
<强>输出强>
01
02
03
04
05
06
07
08
09
10
11
12