2017-05-31 1 views
1

私はこのようなCSVを持っている:私はパッドを取得するためにゼロで最初の列をしたいと思いますどのようにパッドのawkでゼロでCSV最初の列をしますか?

1,"Paris","3.57" 
10,"Singapore","3.57" 
211,"Sydney","3.28" 
324,"Toronto Center","3.33" 

001,"Paris","3.57" 
010,"Singapore","3.57" 
211,"Sydney","3.28" 
324,"Toronto Center","3.33" 

私がprintfの出力に最初の列を割り当てようとしましたAWK:

awk '{ $1 = printf("%03d", $1); print }' my.csv 

しかし、それは私に構文エラーを与える:

awk: cmd. line:1: { $1 = printf("%03d", $1); print } 
awk: cmd. line:1:  ^syntax error 

私はprintf関数を引用する場合はどちらか動作しません。

どうすればいいですか?

答えて

4

あなただけの1つのフィールドのテキストの書式を設定したいなら、あなたはawksprintfを使用することができます。

awk '{ $1=sprintf("%03d", $1)}1' csvfile 

または標準的な方法:問題のOPによる更新を1として

awk '{printf "%03d %s\n", $1,$2}' csvfile 

awk 'BEGIN{FS=OFS=","}{ $1=sprintf("%03d", $1)}1' csvfile 
+0

私は、正しいフィールド区切りおよびテキスト区切り文字で私の質問を更新しました。 – Pak

+0

@Pak chek最新のアップデート。今すぐ修正。 –

0
awk '{printf("%03d", $1) ; print " "$2}' my.csv 
3

printfは関数ではありません、それはキーワードであり、その結果割り当てることができません。

、フォーマットされた文字列を返す(関数である)sprintfを使用するには:

awk -F, -v OFS=, '{ $1 = sprintf("%03d", $1) } 1' file 

-F介して)FSを設定する必要があるとOFS AWKライン、フィールドを再フォーマットするようにセパレータは元のままです。

関連する問題