2017-09-05 30 views
0

我不得不从1为01代替了一个月的天9 09.我这样做,基于下面的代码AWK - 无法替代的价值

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

但现在所有的其他日子一样10,11正在被替换为010,011 请指导我如何编写,以便只有单个数字的天数前缀为0.谢谢

+0

** **想什么'-delimited脚本 '一个''里面S' 你试图使用'真的做。 –

回答

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 
+0

使它'gsub(/ \ y [0-9] \ y /,“0&”)'可能有用(尽管@Kents'printf'解决方案更好,除非数字嵌入在其他文本中)。 –

+0

非常感谢你的回答@hakan巴巴。不幸的是,它仍然没有给出必要的答案。我的输入是日期:2017年9月5日,这是我的代码if(substr($ 0,5,5)==“Date:”){gawk gsub(/ \ y [0-9] \ y /,“0 &",$3); sub (/ Sep /,“09”,$ 2); print“EndDate”$ 4 $ 2 $ 3>“output.txt”; next}对于当前日期,我得到正确的输出为20170905,但是如果我将输入更改为Date: 2017年9月15日我的输出是2017090105 – madsthiru

+0

@madsthiru我用你的例子更新了我的答案,它可以按照我的预期工作 –

3

,而不是gsub()printf是你正在寻找,看到的例子功能:

kent$ seq 12|awk '{printf "%02d\n", $0}' 
01 
02 
03 
04 
05 
06 
07 
08 
09 
10 
11 
12 
+0

甚至跳过'awk' 'xargs printf'的支持取决于OP真正想要做什么 – Kevin

+1

@Kevin你是对的,但我猜*,OP有一个dateformat字符串,并且只是想填充一个月份,他让这个例子更简单。 – Kent

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