2016-02-29 52 views
1

我的文件格式如下:使用awk來選擇零左墊某些領域只有

1/2/2559,11:58:00,4/1/2559,09:36:04,10,55,My Name 

我只想與零隻有第6列用awk(除其他事項外)左墊。

對於例如,輸出可能是:

My Name,1/2/2559/11:58:00,10,0055,4/1/2559,09:35:04 

所以在我上面的例子中,兩個第五和第六列數場,但我只是想離開墊的領域之一。

的printf的例子,我從其他崗位走到這一步,(說使用printf ($7,$1,$2,$5,"%04d\n",$6,$3,$4)似乎範圍在各個領域或在到達爲左補齊場終止當前行。

希望瞭解這方面的一些三分球, 。感謝

+0

你可能要研究如何printf的作品。這不是那麼困難,它的(幾乎)所有語言的語法都是一樣的:awk,bash,C,... – mauro

回答

3

這不符合您發佈的預期輸出,但我不明白,你怎麼能拿從你張貼所以這可能是你在找什麼輸入:

$ awk -F, '{printf "%s,%s,%s,%s,%04d,%s,%s\n",$7,$1,$2,$5,$6,$3,$4}' file 
My Name,1/2/2559,11:58:00,10,0055,4/1/2559,09:36:04 

如果沒有,然後編輯你的問題前明確您的樣本輸入和預期輸出之間的映射。

還認爲:

$ awk 'BEGIN{FS=OFS=","} {$6=sprintf("%04d",$6)} 1' file 
1/2/2559,11:58:00,4/1/2559,09:36:04,10,0055,My Name 
+0

我明白了,明白了。所以基本上,如果我要指定一個字段的格式,我需要指定所有的字段。這會讓我的命令很長(我的實際腳本有大約50個字段),但是我猜如果需要完成它,需要完成。如果你知道一種方法只需要指定一個字段的格式,將不勝感激。 – feicipet

+0

是的,這是微不足道的,但這一切都取決於你的意思。你目前的問題有兩個部分 - 1)格式化1場,2)重新安排多個領域。最好的解決方案將取決於您正在重新排列的字段的百分比。 –

+0

是的,我現在明白你的解釋。我發現使用printf輸出可能不是最好的解決方案。現在,通過爲每行{a = sprintf(「%04d」,$ 6)}分配一個格式化的數字,然後將該變量打印在一個普通的print()語句中,我找到了一個更好的解決方案。結束。但在我這個拙劣的框架問題中,你的回答是正確的:) – feicipet