Konsequenzen des Entfernens von NUL-Zeichen aus einer Textdatei?

496
Hashim

Ich habe eine ziemlich große Textdatei (ca. 20 GB), die ich als einfache Datenbank verwende. Jeder Datensatz wird durch eine neue Zeile getrennt. Das Durchbrechen dieses Formats führt zu Problemen. Diese Datei enthält auch einige NUL-Zeichen, oder zumindest vermute ich, dass grepsie als binäre Datei behandelt wird.

Ich bin auf diese Frage und Antwort gestoßen, die besagt:

Einige Lesungen haben gezeigt, dass grep in den ersten tausend Bytes nach einem Nullzeichen sucht, und bestimmt dann, ob eine Datei "binär" ist oder nicht.

Aus diesem Grund denke ich daran, diese Zeichen aus der Datei zu entfernen:

tr < file-with-nulls -d '\000' > file-without-nulls 

Ich möchte jedoch sicher sein, dass die Formatierung der Datei dadurch nicht beeinträchtigt wird. Ist das überhaupt eine Möglichkeit?

0
Was ist, wenn Sie es nur tun und in eine neue Datei speichern. Dann prüfen Sie, ob die neue Datei ordnungsgemäß funktioniert. Textdateien enthalten normalerweise keine Nullen, daher wissen wir nicht, welche Funktion sie möglicherweise bereitstellen. fixer1234 vor 6 Jahren 1
Kommt das Nullzeichen aus dem Mischen von UTF-16 mit UTF-8? UTF-16-Text enthält Nullen. matzeri vor 6 Jahren 2
[Diese Antwort] (https://unix.stackexchange.com/a/276028/108618) besagt, dass ein Codierungsfehler beteiligt sein kann. Kamil Maciorowski vor 6 Jahren 0
@KamilMaciorowski Wenn es sich bei dem in dieser Antwort beschriebenen Codierungsfehler um den für mich unwahrscheinlicheren Fall handelt, führt das Entfernen der Datei mit NUL-Zeichen wahrscheinlich zu einem Schaden? Ich gehe davon aus, dass sie mehr oder weniger unabhängig voneinander sind, so dass das Entfernen der NUL-Zeichen theoretisch unwahrscheinlich ist, selbst wenn der Kodierungsfehler vorliegt. Hashim vor 6 Jahren 0
@matzeri Ich habe die Dateien nicht erstellt, sie wurden aus dem Internet bezogen und wurden wahrscheinlich von Dutzenden von Leuten bearbeitet und erwarben dabei alle möglichen Artefakte. Es könnte gut sein, dass Sie sagen, ich habe nur keine Ahnung. Hashim vor 6 Jahren 0
@ fixer1234 Da es unmöglich ist, definitiv zu bestimmen, ob die Formatierung einer 20-GB-Textdateidatenbank mit 1,2B-Zeilen und mehr als 1800 NUL-Zeichen tatsächlich fehlerhaft ist oder nicht, wäre ein Fehler hier wahrscheinlich mehr als still, sodass einzelne Datensätze einfach wären verschmelzen Sie mit vorherigen, und "grep" für diese Aufzeichnungen würde den irreführenden Eindruck erwecken, dass keine Übereinstimmungen dafür gefunden werden könnten. Aus diesem Grund muss ich sicher sein, dass das, was ich plane, theoretisch korrekt ist, da eine Datei dieser Größe nicht mehr durchgescrollt werden kann, nachdem überprüft wurde, ob alles in Ordnung ist. Hashim vor 6 Jahren 0
@ fixer1234 Was die Funktion der NULs in einer Textdatei mit Zeilenumbruch anbelangt, so ist es wahr, dass eine solche Datei normalerweise keine NULs enthält, aber um meine Frage auf eine andere Art zu stellen - sind sie wirklich in ihnen nötig? Gibt es (theoretisch natürlich) Möglichkeiten, wie eine mit Zeilenumbrüchen versehene Textdatei jemals für die Formatierung auf NULs angewiesen sein muss, oder können sie als Artefakte betrachtet werden, die einfach entfernt werden können, ohne die Position von Zeilenumbrüchen zu beeinflussen? Hashim vor 6 Jahren 0
was ist die Ausgabe von `file your-file-name '? matzeri vor 6 Jahren 0
@matzeri "Daten" Hashim vor 6 Jahren 0
Daten könnten bedeuten, dass unterschiedliche Testcodierungen miteinander vermischt wurden. Wenn die Nullen aus normalen ASCII-Zeichen in der UTF-16-Wiedergabe stammen, sollten alternative "Null / ASCII" -Paare angezeigt werden. In diesem Fall wird durch das Entfernen der Nullstelle nur UTF-16 in ASCII konvertiert. Wenn Sie jedoch UTF-16-Code haben, der den ASCII-Bereich überschreitet, werden durch das Entfernen der Null die anderen Zeichen in der falschen Kodierung belassen. matzeri vor 6 Jahren 1
Wenn es sich um reinen ASCII-Text handelt, darf er nur Textzeichen und LF oder CR / LF enthalten. Es gibt keine andere Formatierung als Zeilenumbrüche. Wenn der Inhalt einen erweiterten Zeichensatz enthielt, glaube ich nicht, dass das Entfernen von Nullen etwas ändern würde, wie Matzeri bereits vorgeschlagen hatte (ich denke nicht, dass Null den Charakter ändert). Sie müssen jedoch nicht die Wirkung jeder letzten Null überprüfen. Wenn sie von etwas wie UTF-16 stammen, haben alle den gleichen Effekt, wenn sie entfernt werden. Finden Sie den Ort einiger Beispiele und überprüfen Sie diese nach der Bereinigung. (weiter) fixer1234 vor 6 Jahren 1
Wenn es absolut wichtig ist, dass Sie die Daten nicht versehentlich ändern, entfernen Sie die Nullen nicht. Sie sind anscheinend keine Quelle von Problemen, und 1800 in einer 20 GB-Datei wird keinen wirklichen Unterschied machen. fixer1234 vor 6 Jahren 1

0 Antworten auf die Frage