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

感谢您的帮助。

编辑:

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?

4

1 回答 1

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 }
于 2012-11-01T13:42:45.993 回答