GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Ist es in Bash möglich, mit dem Lesen einer Datei von einem beliebigen Byte-Zähl-Offset zu beginnen?

Ich möchte ein Datum finden, das sich irgendwo in einem 8-GB-Protokoll (Text) befindet.

Kann ich ein vollständiges sequenzielles Lesen etwas umgehen und zuerst binäre Aufteilungen der Datei (Größe) durchführen oder irgendwie durch die inodes des Dateisystems navigieren (was ich sehr weiß etwas über), um von jedem Teilungspunkt aus zu lesen, bis ich einen geeigneten Offset finde, von wo aus ich meine Textsuche nach einer Zeile mit dem Datum starten kann?

tail Das Lesen der letzten Zeile verwendet kein normales sequentielles Lesen, daher frage ich mich, ob diese Einrichtung irgendwie in Bash verfügbar ist oder ob ich Python oder C/C++ verwenden müsste … aber ich interessiere mich speziell für einen bash Option..

Akzeptierte Antwort:

for (( block = 0; block < 16; block += 1 ))
do 
    echo $block; 
    dd if=INPUTFILE skip=$((block*512))MB bs=64 count=1 status=noxfer 2> /dev/null | 
        head -n 1
done

was .. keine Temp-Split-Dateien erstellt, Blöcke überspringt * 512 MB Daten bei jedem Durchlauf, 64 Bytes von dieser Position liest und die Ausgabe auf die erste Zeile dieser 64 Bytes begrenzt.

Vielleicht möchten Sie 64 so anpassen, wie Sie es für nötig halten.


Linux
  1. Bash-Skript zum Entfernen der ältesten Datei aus einem Ordner?

  2. Wie liest man eine Zeichenfolge als Hex-Zahl in Bash?

  3. Lesen von Zeilen aus einer Datei mit Bash:Für Vs. Während?

  4. Lesen von Grep-Mustern aus einer Datei?

  5. Wie liest man eine Variable aus einer Datei?

So lesen Sie Dateien Zeile für Zeile in Bash

So lesen Sie eine Datei Zeile für Zeile in Bash

Bash-Scripting:So lesen Sie Daten aus Textdateien

Erstellen Sie Text, der Daten aus einer Datei liest?

Abrufen der Anzahl der aktuell verwendeten Dateideskriptoren aus dem C-Code

Entfernt eine bestimmte Zeile aus der Bash-Verlaufsdatei