AWK - 无法替换该值

时间:2017-09-05 12:51:35

标签: linux shell awk

我必须将一个月的日期从1到9替换为01到09.我是根据以下代码完成的

echo "1"|awk '{gsub('1',"01")}1'
echo "2"|awk '{gsub('2',"02")}1'

但现在所有其他日子如10,11都被替换为010,011 请指导我如何编写它,以便只有一位数的天数以0为前缀。谢谢

3 个答案:

答案 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