次のバイナリのようなsedユーティリティです。bbe

次のバイナリのようなsedユーティリティです。bbe

レコードの末尾に改行を追加しないプログラムによって生成されたいくつかのファイルがあります。レコード間に改行を追加したい。単純なsedスクリプトを使用してこれを実行できます。

sed -e 's/}{/}\n{/g'

問題は、入力ファイルのサイズが複数GBであるため、sedの入力行の長さが複数GBであることです。 sedはメモリに1行を保存しようとしますが、この場合は機能しません。そのオプションを試しましたが、--unbuffered速度が遅くなり、正しく完了していないようです。

ベストアンサー1

他のツールを使用して入力レコード区切り文字を設定できます。例えば

  • パール

    perl -pe 'BEGIN{ $/="}{" } s/}{/}\n{/g' file
    

    特殊変数$/は入力レコード区切り文字です。}{で終わる行を定義するように設定します}{。これにより、内容全体をメモリに読み込むことなく、必要なものを得ることができます。

  • 集めるか飾る

    awk -v RS="}{" -vORS= 'NR > 1 {print "}\n{"}; {print}' file 
    

    同じ考えです。RS="}{"レコード区切り記号をに設定し}{}改行{(最初のレコードを除く)と現在のレコードを印刷します。

おすすめ記事