用AWK中的零替换空白字段

时间:2014-07-17 10:51:47

标签: bash awk sed

我希望使用awk用零替换空白字段但是当我使用sed的/ / 0 /'文件时,我似乎在我只想要考虑丢失数据时替换所有空格。由于某些空字段,使用awk'{print NF}'文件会返回不同的字段编号(即9,4)

输入

590073920  20120523 0    M $480746499      CM C 500081532  SP    
501298333           0    M *BB   
501666604           0    M *OO    
90007162            7    M +178852   
90007568            3    M +189182   

输出

590073920  20120523 0    M $480746499      CM C 500081532  SP    
501298333  0         0    M *BB             0 0 0          0   
501666604  0         0    M *OO             0 0 0          0 
90007162   0         7    M +178852         0 0 0          0
90007568   0         3    M +189182         0 0 0          0

1 个答案:

答案 0 :(得分:2)

使用GNU awk FIELDWIDTHS功能进行固定宽度处理:

$ awk '{for(i=1;i<=NF;i++)if($i~/^ *$/)$i=0}1' FIELDWIDTHS="11 9 5 2 16 3 2 11 2" file | column -t
590073920  20120523  0  M  $480746499  CM  C  500081532  SP
501298333  0         0  M  *BB         0   0  0          0
501666604  0         0  M  *OO         0   0  0          0
90007162   0         7  M  +178852     0   0  0          0
90007568   0         3  M  +189182     0   0  0          0