2017-09-05 82 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