我想替换。在第二列中,在第二列中为0.以运行程序。原始文件有两列和大约6百万行,我不知道如何做到这一点。
rs4951859 .4251
rs142557973 .3874
rs141242758 .2732
rs79010578 .7447
我试过
sed -i 's/./0./g'
但这不起作用。
答案 0 :(得分:5)
.
在sed使用的正则表达式语言中具有特殊含义。它意味着一个任意字符,它将有效地用.0
替换任何字符。
正确就是逃避搜索部分中的点,如下所示:
sed 's/\./0./'
答案 1 :(得分:1)
我想替换。在第二列中有一个0.
awk '{sub(/\./, 0, $2) }1' infile
sub(/\./, 0, $2)
替换,点(.
)与0
在第二个字段中。 1
执行默认操作,即打印当前/记录/行,打印$ 0。要知道awk是如何工作的,请使用awk'1'infile,它将打印所有记录/行,而awk'0'infile则不打印任何内容。除零以外的任何数字都为真,这会触发默认行为。如果点(.
)要替换为零和点(0.
)
awk '{sub(/\./, "0&", $2) }1' infile
答案 2 :(得分:0)
看看这是如何标记的perl
,等效的Perl解决方案是:
perl -pi -e 's/\./0./' YOURFILE
与sed一样,正则表达式中的.
匹配任何字符(换行符除外),因此如果您想要按字面意思匹配,则需要使用\
进行转义。
答案 3 :(得分:0)
这似乎适用于GNU awk,只需在第二个字段中添加零:
awk '{print $1, $2 + 0}' file
将输出传输到column -t
以使其更漂亮。
如果有人有时间进行基准测试,我很好奇这个测试的速度有多慢。