用零替换缺失值空格

jac*_*ack 13 sed awk perl text-processing

我有大约 30K 行的 input.txt 制表符分隔的文本文件,我想检查每一行(s1..s30K 行)的缺失值(即空格)并用零值填充缺失值。See out.txt

输入文件

 id  no1  no2  no3  no4
 s1  23   34   45   12
 s2       4    4      
 s3  4         8    0
Run Code Online (Sandbox Code Playgroud)

输出.txt

id  no1  no2  no3  no4
s1  23   34   45   12
s2  0     4    4    0  
s3  4     0    8    0
Run Code Online (Sandbox Code Playgroud)

Tho*_*hor 14

你可以用 awk 这样做:

awk 'BEGIN { FS = OFS = "\t" } { for(i=1; i<=NF; i++) if($i ~ /^ *$/) $i = 0 }; 1' file
Run Code Online (Sandbox Code Playgroud)

解释

将 FS 和 OFS 设置为制表符可确保正确分隔输出。for 循环查看每个字段,如果为空,则将其设置为零。最后的那个是 的简写{ print $0 }


mdp*_*dpc 5

我更喜欢:

sed 's/<TAB> /<TAB>0/g' <input.txt >output.txt
Run Code Online (Sandbox Code Playgroud)

替换<TAB>为真正的 TAB 字符(一般通过点击Ctrl-V, then获得Tab