我想在文件的每一行开头添加一个特定的字符串。因此,如果我有以下两行文本在someFile.txt中,并且想要添加一个日期字符串03/06/2012和竖线|
Hello|there|john
Hello|there|joel
我会-
03/06/2012|Hello|there|john
03/06/2012|Hello|there|joel
如何以最有效的方式实现这个目标?
$ awk '{print "03/06/2012|" $0;}' input.txt > output.txt
在一些普通的 2010 年硬件上,处理具有 130 万行的文件大约需要 0.8 秒。
sed -i 's/^/03\/06\/2012|/' input.txt
Perl解决方案:
perl -ne 'print "03/06/2012|$_"' input.txt > output.txt
只是为了好玩,在/tmp中进行了10次基准测试:
Rate awk perl_5.6.1 sed perl_5.22 perl_5.20
awk 2.08/s -- -10% -10% -26% -32%
perl_5.6.1 2.32/s 11% -- -0% -17% -24%
sed 2.33/s 12% 0% -- -17% -24%
perl_5.20 3.06/s 47% 32% 31% 9% --
这里使用了一个1.3M行的输入文件进行测试,文件的创建方式如下:
perl -le 'while (1){exit if ++$n > 1300000; print $n}' > input.txt
s
命令的字段分隔符,而不是像/
那样。这样,您就无需烦恼转义日期中的/
了。例如:sed -i 's#^#03/06/2012|#' input.txt
。 - Digital Trauma