【问题标题】:Replace blank fields with zeros in AWK在 AWK 中用零替换空白字段
【发布时间】:2014-07-17 20:10:56
【问题描述】:

我希望使用 awk 将空白字段替换为零,但是当我使用 sed 's/ /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

【问题讨论】:

    标签: bash awk sed


    【解决方案1】:

    使用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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-27
      • 1970-01-01
      • 1970-01-01
      • 2021-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多