我有大约 30K 行的 input.txt 制表符分隔文本文件,我想检查每一行(s1..s30K 行)是否缺少值(即空格)并用零值填充缺失值。请参阅 out.txt
输入.txt
id no1 no2 no3 no4
s1 23 34 45 12
s2 4 4
s3 4 8 0
输出.txt
id no1 no2 no3 no4
s1 23 34 45 12
s2 0 4 4 0
s3 4 0 8 0
答案1
你可以用 awk 这样做:
awk 'BEGIN { FS = OFS = "\t" } { for(i=1; i<=NF; i++) if($i ~ /^ *$/) $i = 0 }; 1' file
解释
将 FS 和 OFS 设置为制表符可确保输出正确分隔。 for 循环查看每个字段,如果为空,则将其设置为零。最后的那个是 的简写{ print $0 }
。
答案2
我更喜欢:
sed 's/<TAB> /<TAB>0/g' <input.txt >output.txt
替换<TAB>
为真正的TAB字符(一般通过点击Ctrl-V, 然后获得Tab)