我有一个脚本,每分钟检测文件夹中的新文件并解析它们。
最近我遇到了大文件的问题。如果文件很大,解析器就会挂起。
所以如果尺寸太大我就会把它们分开。我正在使用这个命令:
split -n l/5 -d filename filename
我计算块数,将大小除以解析器可接受的大小。
现在到了棘手的部分。我要分割的文件的前两行非常重要,我需要将这两行添加到结果文件的顶部。
如果我可以在同一个命令行中以某种方式解析生成的分割文件,那就太好了...大小是可变的,我可以有 20 个新文件或只有 2 个,所以我无法预见哪个是结果文件的原始文件。
答案1
您可以使用ed
(如果文件的前两行不是一个点):
split -n l/5 -d filename split_filename
for i in split_filename* ; do
(echo 1i && head -n 2 filename && echo -e ".\nw" ) | ed -s $i
done
# if necessary remove double header from first file:
sed -i "1,2d" split_filenameaa
答案2
丑陋但应该有用:
split -n l/5 -d filename split_filename && find ./ -name 'split_filename*' -exec sh -c "echo `head -2 filename` | cat - {} > temp && mv temp {}" \;