回答
所以,我经历了和测试/定时一些被其他人给的答案之前整合,加上我自己的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. 如何用JavaScript中的空格替换换行符/换行符?
- 3. Vim:替换行的末尾
- 4. vim字符串替换
- 5. 在vim搜索和替换中,换行符呈现为“^ @”
- 6. 替换Vim中字符串的引号?
- 7. Vim全局替换(行)
- 8. 替换换行符
- 9. vi替换vim中的不同行为
- 10. 如何使用gsub替换换行符?
- 11. 如何用换行符替换空格只在换行符上?
- 12. 如何替换换行符的字符串中的Jinja2
- 13. 如何在Vim中用'=&'替换'&='?
- 14. Vim替换一行中的某个字中的特定字符
- 15. 如何用Emacs中的换行符替换字符?
- 16. 如何用emacs中的换行符(LF)替换空格字符?
- 17. 如何在替换字符串中使用VIM的toupper?
- 18. Vim的 - 搜索和替换所有字符中的每一行
- 19. 用换码符替换换行符
- 20. ZSH:如何在命令行中运行Vim-style替换命令?
- 21. 替换UNIX中的换行符
- 22. Vim替换拆分
- 23. 在vim中替换数组
- 24. 在Vim中搜索/替换
- 25. iText - 换行符替换为?
- 26. Java String.replaceAll()替换换行符
- 27. 如何在Vim中将cp1250特定字符替换为utf-8
- 28. 替换Vim中的项目而不替换旧的替换项目
- 29. 在m4的patsubst中,我如何用空格替换换行符?
- 30. 如何将/ n替换为react.js中的换行符?
你为什么想在VIM中做到这一点。你只会得到一条你无法阅读的长线(用眼睛看)。另外,还有什么线结局存在:DOS,UNIX,MAC还是组合? – Marichyasana 2013-01-01 23:06:17