替换。在一个txt文件中为0.只有一定数量的大量行

时间:2017-11-07 14:10:47

标签: perl file awk sed replace

我想替换。在第二列中,在第二列中为0.以运行程序。原始文件有两列和大约6百万行,我不知道如何做到这一点。

rs4951859         .4251
rs142557973       .3874
rs141242758       .2732
rs79010578        .7447

我试过

sed -i 's/./0./g'

但这不起作用。

4 个答案:

答案 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以使其更漂亮。

如果有人有时间进行基准测试,我很好奇这个测试的速度有多慢。