同じパイプラインで結果ファイルを分割して編集する

同じパイプラインで結果ファイルを分割して編集する

毎分フォルダ内の新しいファイルを検出して解析するスクリプトがあります。

最近、大容量ファイルに問題が発生しました。ファイルが大きい場合、パーサーは中断されます。

だからサイズが大きすぎる場合は分離します。私は次のコマンドを使用しています:

split -n l/5 -d filename filename

チャンク数を数え、パーサーが許容できるサイズに分割します。

今、トリッキーな部分が出てきます。分割したいファイルの最初の2行は非常に重要なので、結果ファイルの先頭にこれら2行を追加する必要があります。

同じコマンドラインで生成された分割ファイルを何らかの方法で解析できれば良いでしょう。ファイル。

答え1

以下を使用できますed(ファイルの最初の2行がドットではない場合)。

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

関連情報