在同一管道中拆分和编辑结果文件

在同一管道中拆分和编辑结果文件

我有一个脚本,每分钟检测文件夹中的新文件并解析它们。

最近我遇到了大文件的问题。如果文件很大,解析器就会挂起。

所以如果尺寸太大我就会把它们分开。我正在使用这个命令:

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 {}"  \;

相关内容