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

时间:2015-04-08 13:21:02

标签: 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   0.37    0.75    1.00
Chr1_105    0       0      0.94
Chr1_109    0      1.00    0

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

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

tr '\t' '0'

有什么建议吗? 感谢

1 个答案:

答案 0 :(得分:2)

你可以这样做:

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
相关问题