如何将空格转换为零值(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
那就是
- 将所有出现的相邻选项卡替换为夹在两个选项卡之间的零
- 这需要执行两次,因为
与替换的内容不匹配。因此,如果有3个相邻的选项卡,则只有两个间隙中的一个会被填充sed
- 这需要执行两次,因为
- 如果以制表符开头,请在行首插入0
- 如果以制表符结尾,则在行尾追加0
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