如何将空格转换为零值 (unix)

How to convert blank spaces to zero values (unix)

我有这个制表符分隔的文件内容:

Chr10_16           0.54    1.00
Chr10_51   1.00    1.00    1.00
Chr1_104   0.37    0.75    1.00
Chr1_105                   0.94
Chr1_109           1.00

我想将其转换为:

Chr10_16    0      0.54    1.00
Chr10_51   1.00    1.00    1.00
Chr1_104   0.37    0.75    1.00
Chr1_105    0       0      0.94
Chr1_109    0      1.00    0

我尝试了不同的命令,但它们没有像我预期的那样工作。例如

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

tr '\t' '0'

有什么建议吗? 谢谢

你可以这样做:

sed -e 's/\t\t/\t0\t/g' -e 's/\t\t/\t0\t/g' -e 's/^\t/0\t/' -e 's/\t$/\t0/' file

也就是...

  • 将所有出现的相邻制表符替换为夹在两个制表符之间的零
    • 这需要完成两次,因为 sed 不会匹配替换的内容。因此,如果您有 3 个相邻的选项卡,否则只会填充两个空白中的一个。
  • 如果以制表符开头,则在行首插入 0
  • 如果以制表符结尾,则在行尾附加一个 0