2012-11-01 87 views
1

我有一個文件:如何替換空白空間零?

nr kl1 kl2 kl3 kl4 
d1 15 58 63 58 
d2  3 3  
d3 3   8 0 

我想打印:

nr kl1 kl2 kl3 kl4 
d1 15 58 63 58 
d2 0 3 3 0 
d3 3 0 8 0 

我試過GSUB的解決方案,但它不工作。

awk '{gsub(/ /, 0, $2); print }' file 

謝謝你的幫忙。

編輯:

埃德莫頓解決方案適用於GAWK,但它不mawk工作。

$ gawk 'BEGIN{ FIELDWIDTHS="5 5 5 5 5"; OFS="" }NR>1 {for (i=2;i<=NF;i++)$i=sprintf("%-5d",$i)}{ sub(/ +$/,""); print }' file 
nr kl1 kl2 kl3 kl4 
d1 15 58 63 58 
d2 0 3 3 0 
d3 3 0 8 0 

$ mawk 'BEGIN{ FIELDWIDTHS="5 5 5 5 5"; OFS="" }NR>1 {for (i=2;i<=NF;i++)$i=sprintf("%-5d",$i)}{ sub(/ +$/,""); print }' file 
nr kl1 kl2 kl3 kl4 
d115 58 63 58 
d23 3 
d33 8 0 

如何做到這一點,但mawk?

+1

該文件是否使用製表符分隔字段? – beny23

+0

@ beny23,是的,該文件不使用製表符分隔字段。 – Tedee12345

回答

4

你試過的東西沒有用,因爲你的字段沒有用空格分隔,它們是固定的寬度。試試這個GNU awk:

BEGIN{ FIELDWIDTHS="5 5 5 5 5"; OFS="" } 

NR>1 { 
    for (i=2;i<=NF;i++) 
     $i=sprintf("%-5d",$i) 
} 
{ sub(/ +$/,""); print } 
+0

謝謝你的回答。您的解決方案適用於gawk,但它不適用於mawk。看我的編輯。 – Tedee12345

+0

這是正確的,我說這是一個GNU awk解決方案。由於mawk具有最小的功能集,因此不應該知道如何在mawk中執行此操作,並且只能在需要解決高性能關鍵問題時使用。只需安裝gawk。 –

+0

謝謝你的幫助。 – Tedee12345