回答
所以,我经历了和测试/定时一些被其他人给的答案之前整合,加上我自己的python答案。以下是我的了:
TR:
> time tr "\n" "," <lines> line
real 0m1.617s
user 0m0.100s
sys 0m1.520s
蟒蛇:
> time python -c 'import sys; print sys.stdin.read().replace("\n",", "),' <lines> line
real 0m1.663s
user 0m0.060s
sys 0m1.610s
AWK:
> time awk '{printf("%s, ", $0)}' lines > line
real 0m1.998s
user 0m0.390s
sys 0m1.600s
点的Perl:
> time perl -e 'while (<>) { chomp; print "$_, " }' lines > line
real 0m2.100s
user 0m0.590s
sys 0m1.510s
的sed:
> time sed 's/$/, /g' lines > line
real 0m6.673s
user 0m5.050s
sys 0m1.630s
这里是我使用的文件:
> ls -lh lines
-rw-r--r-- 1 some one 101M 2010-03-04 19:54 lines
> wc -l < lines
1300000
> head -n 3 < lines
The pretty pink puma pounced on the unsuspecting aardvark, the scientist watched.
The pretty pink puma pounced on the unsuspecting aardvark, the scientist watched.
The pretty pink puma pounced on the unsuspecting aardvark, the scientist watched.
> head -n 1 < lines | wc -c
82
最初采取了Cygwin的时序,他们现在已经采取完全更新的Ubuntu 9.10。此外,文本文件的大小增加到100兆,线宽为80个字符。正如你可以看到除sed以外的其他任何东西都是一个好主意。
之前测试它,我非常怀疑你的awk结果。你几次命令,而不只是一次。 Python不应该比awk快,考虑到导入模块和东西需要时间 – ghostdog74 2010-03-05 00:56:35
它运行了几次,大概是平均值。只要再跑10次,每次1.7XX。如果我不使用cygwin awk,可能会有所不同。 – 2010-03-05 01:01:01
@ ghostdog74 你对我的awk结果怀疑是正确的,我重新在真正的Linux机器上运行它,并且速度更快。 – 2010-03-05 02:46:27
使用此Perl脚本浏览您的文件;它将比使用VIM在内存中保存所有内容更快。只需将输出输出到新文件。
#!/usr/local/bin/perl
while (<>) {
$_ =~ s/\n/,/g;
print $_;
}
我猜测perl解释器不够聪明,知道在这种情况下'$ _'除了最后一个字符之外不能有换行符 - 'chomp'可能要快很多。 – Cascabel 2010-03-04 14:43:56
@Jefromi 在我完全不科学的测试中,在100 meg文件上使用chomp速度约为300ms。 – 2010-03-05 03:08:51
你必须在vim中做到这一点吗?
有很好的Unix实用程序可以进行基于字符的翻译。它叫做tr
。 一些reference。
你的情况,那就是:
tr "\n" "," < input_file > output_file
这几乎肯定比我发布的解决方案更快,但不幸的是,它会根据OP的要求替换“,”而不是“,”。我不确定有什么方法可以用'tr'来做,是吗? – Cascabel 2010-03-04 14:47:36
tr只需要单个字符 – ghostdog74 2010-03-04 15:07:17
不,没有,我没有注意到那里的空间。要放置超过1个字符,可以使用sed作为下面发布的人。 – pajton 2010-03-04 15:31:37
:%s/$/, /
后跟一个:1,$j
可能会更快。否则,请在外部工具中执行此操作:
perl -e 'while (<>) { chomp; print "$_, " }' input_file > output_file
awk '{printf("%s, ", $0)}' input_file > output_file
不知道脱离我的头,这将是最快的。
'perl -ne'chomp;打印“$ _”,“文件”。 '-n'“假设while循环” – ghostdog74 2010-03-04 15:08:17
良好的调用'-n'。 – Cascabel 2010-03-04 15:20:45
@sparrkey,“perl将运行得更快”是不合理的。 – ghostdog74 2010-03-05 01:20:48
$ more file
aaaa
bbbb
cccc
dddd
eeee
$ awk 'NR>1{printf("%s, ", p)}{p=$0}END{print p}' file
aaaa, bbbb, cccc, dddd, eeee
$ sed -e :b -e '$!N;s/\n/, /;tb' file
你测试过你的sed命令吗? sed'N; s/\ n /,/'文件 – sparkkkey 2010-03-05 16:21:49
不是。它削减了维基的粘贴,但我猜维基有时候不可信。 – ghostdog74 2010-03-05 23:58:07
最好的工具是sed,你可以使用它:!命令
所以使用:!sed -e 's/\n/,/g' % > %.tmp ; cat %.tmp > % ; rm %.tmp'
你需要创建一个变化的tmp文件在当前文件
你测试了你的sed命令吗? – ghostdog74 2010-03-05 01:05:34
是的,我在 – shingara 2010-03-05 07:52:24
- 1. Vim替换换行
- 2. 如何用VsCode Vim中的换行符替换
- 3. 替换Vim中的替换
- 4. 如何在vim中替换
- 5. 如何从VIM中的字符串列表中进行替换?
- 6. Vim:替换行的末尾
- 7. vim用一行替换多个字符
- 8. vim字符串替换
- 9. Vim替换为unicode字符
- 10. 在vim搜索和替换中,换行符呈现为“^ @”
- 11. 替换Vim中字符串的引号?
- 12. Vim全局替换(行)
- 13. 替换换行符
- 14. vi替换vim中的不同行为
- 15. 如何使用gsub替换换行符?
- 16. 如何用换行符替换空格只在换行符上?
- 17. vim中的条件替换
- 18. 如何替换包含换行符的awk中的字符串?
- 19. 如何替换换行符的字符串中的Jinja2
- 20. 如何在Vim中用'=&'替换'&='?
- 21. 如何在VIM中替换表达式
- 22. 如何在VIM中替换此文本?
- 23. GNU sed换行符/替换字符串中的换行符
- 24. Vim替换一行中的某个字中的特定字符
- 25. 如何用Emacs中的换行符替换字符?
- 26. 如何用字符串中的换行符替换斜杠
- 27. 如何用emacs中的换行符(LF)替换空格字符?
- 28. 如何用Vim中的函数结果替换字符串?
- 29. 如何在替换字符串中使用VIM的toupper?
- 30. 如何使用JavaScript替换一个换行符来换行回车/换行符?
你为什么想在VIM中做到这一点。你只会得到一条你无法阅读的长线(用眼睛看)。另外,还有什么线结局存在:DOS,UNIX,MAC还是组合? – Marichyasana 2013-01-01 23:06:17