如何在连接之前插入新行?

时间:2011-07-28 18:18:19

标签: linux file unix command-line ubuntu

我有大约80000个文件,我试图连接。这一个:

cat files_*.raw >> All

非常快,而以下内容:

for f in `ls files_*.raw`; do cat $f >> All; done;

非常慢。由于这个原因,我试图坚持第一个选项,除了我需要能够在每个文件连接到All后插入一个新行。有没有快速的方法呢?

4 个答案:

答案 0 :(得分:3)

怎么样?
ls files_*.raw | xargs -L1 sed -e '$s/$/\n/' >>ALL

当你连接它们时,它会在每个文件的末尾插入一个额外的换行符。

如果你不关心连接的顺序,那就是并行版本:

find ./ -name "*.raw" -print | xargs -n1 -P4 sed -e '$s/$/\n/' >>All

答案 1 :(得分:2)

第二个命令可能很慢,因为您打开'All'文件以追加80000次而第一个命令中的1次。尝试第二个命令的简单变体:

for f in `ls files_*.raw`; do cat $f ; echo '' ; done >> All

答案 2 :(得分:1)

我不知道为什么会这么慢,但我认为你没有太多选择:

for f in `ls files_*.raw`; do cat $f >> All; echo '' >> All; done

答案 3 :(得分:1)

每次awk打开另一个要处理的文件时,FRN等于0,所以:

awk '(0==FRN){print ""} {print}' files_*.raw >> All

注意,这一切都是在一个awk进程中完成的。性能应该接近问题中的cat命令。