我有大约80000个文件,我试图连接。这一个:
cat files_*.raw >> All
非常快,而以下内容:
for f in `ls files_*.raw`; do cat $f >> All; done;
非常慢。由于这个原因,我试图坚持第一个选项,除了我需要能够在每个文件连接到All
后插入一个新行。有没有快速的方法呢?
答案 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命令。