2016-06-09 25 views
0

所以我正在做的是做一個腳本來讀取我的輸入文件,並做相應的東西。字符串格式的前導零 - UNIX腳本

我的輸入文件被髮送到我的格式如下:

ID  QTY 
xxxxxxxxx,xxx 
xxxxxxxxx,xx 
xxxxxxxxx,xxx 
xxxxxxxxx,xx 
xxxxxxxxx,xx 

有時候ID只有8因爲數字是較小的數字。如果發生這種情況,我需要用前導零來格式化它。另外,我的輸入文件有數千行。

我這個至今

echo "${processNew}" 

## Read the file line-by-line and output the id. 
IFS=',' 
while read line 
do 
    echo "%09d\n" $line 

done < ${processNew} 
+0

你想格式化「xxxxxxxxx,xxx'還是'xxxxxxxxx',第一部分只? – syadav

+0

格式化一條線就像這個xxxxxxxxx,xxx - 最後3個x是數量,可以自由選擇或多或少。 –

回答

1

編輯:您是幾乎沒有,只需要在你的代碼中的小調整,但沒有循環:)

這樣寫,如果想打印兩列

awk -F, '{printf "%09d,%d\n" ,$1,$2}' "${processNew}" 

這樣寫,如果想打印只有ID列

awk -F, '{printf "%09d\n" ,$1}' "${processNew}" 
+0

使用'awk'是正確的,但每行輸入運行'awk'是無稽之談。你應該丟失shell循環,並簡單地將輸入文件作爲'awk'的雙引號參數提供 - 導致:'awk -F,'{printf(「%。9d,%d \ n」,$ 1,$ 2 )}'「$ {processNew}」'其中括號是可選的,'%.9d'的使用等同於'%09d'(雖然有一些不可思議的參數用於選擇'%.9d',但它們很微妙,不重要)。您的代碼的縮進顯示也不太理想。 –

+0

@JonathanLeffler - 你是對的,謝謝你讓我知道。編輯答案 – syadav

+0

@sayadav - 我會在哪裏將該代碼放入我的?你提到失去循環? –

相關問題