在AWK中将空白字段替换为零 [英] Replace blank fields with zeros in AWK

查看:48
本文介绍了在AWK中将空白字段替换为零的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I wish to replace blank fields with zeros using awk but when I use sed 's/ /0/' file, I seem to replace all white spaces when I only wish to consider missing data. Using awk '{print NF}' file returns different field numbers (i.e. 9,4) due to some empty fields

输入

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

推荐答案

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

Using GNU awk FIELDWIDTHS feature for fixed width processing:

$ 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

这篇关于在AWK中将空白字段替换为零的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆