Ich benutze AIX 6.1 ksh Shell.
Ich möchte einen Liner verwenden, um so etwas zu tun:
cat A_FILE | skip-first-3-bytes-of-the-file
Ich möchte die ersten 3 Bytes der ersten Zeile überspringen. Gibt es eine Möglichkeit, dies zu tun?
quelle
Ich benutze AIX 6.1 ksh Shell.
Ich möchte einen Liner verwenden, um so etwas zu tun:
cat A_FILE | skip-first-3-bytes-of-the-file
Ich möchte die ersten 3 Bytes der ersten Zeile überspringen. Gibt es eine Möglichkeit, dies zu tun?
Alte Schule - Sie könnten verwenden dd
:
dd if=A_FILE bs=1 skip=3
Die Eingabedatei ist A_FILE
, die Blockgröße ist 1 Zeichen (Byte), überspringen Sie die ersten 3 'Blöcke' (Bytes). (Mit einigen Varianten dd
wie GNU dd
können Sie bs=1c
hier verwenden - und Alternativen bs=1k
, die unter anderen Umständen gerne Blöcke von 1 Kilobyte einlesen. Unter dd
AIX wird dies anscheinend nicht unterstützt; die BSD-Variante (macOS Sierra) unterstützt dies nicht c
unterstützt jedoch k
, m
, g
, etc.)
Es gibt auch andere Möglichkeiten, um das gleiche Ergebnis zu erzielen:
sed '1s/^...//' A_FILE
Dies funktioniert, wenn sich in der ersten Zeile 3 oder mehr Zeichen befinden.
tail -c +4 A_FILE
Und Sie könnten auch Perl, Python und so weiter verwenden.
dd if=A_FILE bs=1 skip=3
in AIX 6.1Anstatt zu verwenden
cat
, können Sietail
als solches verwenden:Dadurch wird die gesamte Datei mit Ausnahme der ersten 3 Bytes ausgedruckt. Konsultieren Sie
man tail
für weitere Informationen.quelle
/usr/xpg4/bin/tail
zumindest auf meinem Computer verwenden. Trotzdem guter Tipp!Ich musste kürzlich etwas Ähnliches tun. Ich half bei einem Support-Problem vor Ort und musste einen Techniker Echtzeit-Diagramme anzeigen lassen, während er Änderungen vornahm. Die Daten befinden sich in einem binären Protokoll, das im Laufe des Tages wächst. Ich habe eine Software, die die Daten aus Protokollen analysieren und zeichnen kann, aber es ist derzeit nicht in Echtzeit. Ich habe die Größe des Protokolls erfasst, bevor ich mit der Verarbeitung der Daten begonnen habe, und bin dann in eine Schleife gegangen, in der die Daten verarbeitet werden. Bei jedem Durchgang wird eine neue Datei mit den Bytes der Datei erstellt, die noch nicht verarbeitet wurden.
quelle
ls
; Haben Sie darüber nachgedacht,stat -c'%s' "${IFILE}"
anstelle dieserls|awk
Kombination zu verwenden? Das heißt, unter der Annahme von GNU Coreutils ...Wenn man Python auf seinem System hat, kann man ein kleines Python-Skript verwenden, um die
seek()
Funktion zu nutzen, um beim n-ten Byte wie folgt mit dem Lesen zu beginnen:Und die Nutzung wäre so:
Beachten Sie, dass die Byteanzahl bei 0 beginnt (das erste Byte ist also tatsächlich der Index 0). Wenn Sie also 3 angeben, positionieren wir den Messwert effektiv so, dass er bei 3 + 1 = 4. Byte beginnt
quelle