如何更换零空白?

时间:2012-11-01 13:20:56

标签: awk gsub

我有一个文件:

 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

感谢您的帮助。

修改

Ed Morton 解决方案适用于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 个答案:

答案 0 :(得分: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 }