2016-06-09 26 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 - 我会在哪里将该代码放入我的?你提到失去循环? –

相关问题