単純なデータベースとして使用する非常に大きなテキストファイル(約20 GB)があるため、各レコードは新しい行で区切られ、この形式を破ると問題が発生します。このファイルには、NUL文字が含まれgrep
ていることもあります。少なくとも、それがバイナリファイルとして扱われていると思われます。
私はこの質問と回答に出くわしました。
いくつかの読みは、grepが最初の1000バイトほどでヌル文字を探し、それからファイルが「バイナリ」かどうかを判断することを示しています。
このため、これらの文字をファイルから次のようなもので取り除くことを考えています。
tr < file-with-nulls -d '\000' > file-without-nulls
しかし、そうすることでファイルのフォーマットが崩れないことを確認したいと思います。これはまったく可能性ですか?
1
それをして、新しいファイルに保存するだけではどうですか。次に、新しいファイルが適切に機能するかどうかを確認します。通常、テキストファイルにはnullが含まれないため、どの機能を提供するのかわかりません。
—
fixer1234
null文字はUTF-16とUTF-8を混合したものですか?UTF-16テキストにヌルが含まれています。
—
matzeri
データは、異なるテストコーディングが混在していることを意味する場合があります。nullがUTF-16表現の通常のASCII文字から来ている場合、別の
—
マッツェリ
null/ASCII
カップルが表示されます。その場合、nullを削除すると、UTF-16がASCIIに変換されます。ただし、ASCII範囲を超えるUTF-16コードがある場合、nullを削除すると、他の文字が間違ったエンコーディングのままになります。
プレーンASCIIテキストの場合は、テキスト文字とLFまたはCR / LF以外を含めることはできません。改行以外の書式設定はありません。コンテンツに拡張文字セットが含まれていた場合、matzeriが既に提案したように、nullを削除しても何も変わるとは思わない(nullが文字を変更するとは思わない)。ただし、最後のすべてのヌルの効果を検証する必要はありません。それらがUTF-16のようなものに由来する場合、それらをすべて削除すると、同じ効果が得られます。いくつかの例の場所を見つけ、クリーンアップ後にそれらを確認します。(続き)
—
fixer1234
ただし、誤ってデータを変更しないことが絶対に重要な場合は、nullを削除しないでください。それらは明らかに問題の原因ではなく、20GBファイルの1800は実際の違いをもたらさないでしょう。
—
fixer1234