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 }
。
我更喜欢:
sed 's/<TAB> /<TAB>0/g' <input.txt >output.txt
Run Code Online (Sandbox Code Playgroud)
替换<TAB>
为真正的 TAB 字符(一般通过点击Ctrl-V, then获得Tab)