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

如何将空格转换为零值(unix),unix,replace,whitespace,Unix,Replace,Whitespace,我使用此选项卡分隔文件内容: 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

我使用此选项卡分隔文件内容:

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'
有什么建议吗? 谢谢

您可以这样做:

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

使用两次您的命令,我在第2列和第3列中得到了零,但在最后一列中没有得到零……请使用更新的代码重试。它在我的机器上工作。另外,请确保您在该行的末尾有一个似乎遗漏的选项卡。事实上,我自己也曾犯过这样的错误最后一列不起作用…我不了解行末尾的选项卡…抱歉
cat-te文件将向您显示选项卡和EOL的位置。
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