XY bytes von einer Datei abschneiden (erledigt)

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
ren22

XY bytes von einer Datei abschneiden (erledigt)

Beitrag von ren22 » 26.02.2019 20:13:07

Hallo,

ist es richtig, wenn man mit

Code: Alles auswählen

cat datei | head --bytes -100

die letzten 100bytes von der Datei am Ende abgeschnitten werden ?

Code: Alles auswählen

sed 'startzeile,endezeile' datei

sollte auch gehen.
Welche Möglichkeiten gibt es noch, irgenteine Datei am Ende um XY bytes abzuschneiden?

Danke
Zuletzt geändert von ren22 am 27.02.2019 20:52:28, insgesamt 1-mal geändert.

eggy
Beiträge: 3331
Registriert: 10.05.2008 11:23:50

Re: XY bytes von einer Datei abschneiden

Beitrag von eggy » 26.02.2019 20:17:41

split

ren22

Re: XY bytes von einer Datei abschneiden

Beitrag von ren22 » 26.02.2019 21:02:45

hallo eggy

kann man mit split sagen wir 100bytes abschneiden, und diese zur Seite packen, also was anderes kurz machen, und dann Später wieder die 100bytes an die abgeschnitte Datei wieder anfügen so das man wieder das Original hat ? und wenn ja wie ?
Danke

eggy
Beiträge: 3331
Registriert: 10.05.2008 11:23:50

Re: XY bytes von einer Datei abschneiden

Beitrag von eggy » 26.02.2019 21:43:39

Splitte an "Dateigröße - gewollter Rest". Wie?

Code: Alles auswählen

man split

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: XY bytes von einer Datei abschneiden

Beitrag von Meillo » 26.02.2019 21:47:10

Split(1) macht aus einer Datei gleichgrosse Teile und zwar soviele bis die Datei komplett aufgeteilt ist und kein Teil groesser als die angegebene Groesse ist. Das scheint nicht das zu sein was du suchst.

Sed(1) arbeitet zweilenweise, du scheinst aber byteweise arbeiten zu wollen.

`head -c' und `tail -c' scheinen mir schon die passenden Werkzeuge fuer dein Vorhaben zu sein.

Sonst gaebe es noch dd(1), aber das ist weniger einfach zu bedienen als head(1) und tail(1).
Use ed once in a while!

ren22

Re: XY bytes von einer Datei abschneiden

Beitrag von ren22 » 26.02.2019 22:05:23

also meine aktuelle Variante ist, da ich von der Datei 100 bytes abschneiden muss um die korrekte sha1sum zu bekommen, folgende:

Code: Alles auswählen

cat datei | head --bytes -100 | sha1sum | cut -d' ' -f1
Das spart mir dann bei großen Datei jeweils das lästige hin und her kopieren, denke ich mal :)

eggy
Beiträge: 3331
Registriert: 10.05.2008 11:23:50

Re: XY bytes von einer Datei abschneiden

Beitrag von eggy » 26.02.2019 22:11:04

Meillo hat geschrieben: ↑ zum Beitrag ↑
26.02.2019 21:47:10
Split(1) macht aus einer Datei gleichgrosse Teile und zwar soviele bis die Datei komplett aufgeteilt ist und kein Teil groesser als die angegebene Groesse ist. Das scheint nicht das zu sein was du suchst.
Doch, man muss nur die Größe richtig angeben:
Du willst 10 cm vom Kuchen, also ist "irgendwas + 10 cm = der ganze Kuchen", kann man umstellen zu "irgendwas = Kuchen - 10cm", schneiden wir den Kuchen vorne ein "irgendwasgroßes" Stück ab, bleibt der Rest von genau 10cm und so gehts auch mit split.
Der Trick ist halt, dass man nicht die Größe vom Rest angibt, sondern vorher ausrechnet, was "alles ohne den Rest" ist, und dann da schneidet.

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: XY bytes von einer Datei abschneiden

Beitrag von Meillo » 26.02.2019 22:12:06

ren22 hat geschrieben: ↑ zum Beitrag ↑
26.02.2019 22:05:23
also meine aktuelle Variante ist, da ich von der Datei 100 bytes abschneiden muss um die korrekte sha1sum zu bekommen, folgende:

Code: Alles auswählen

cat datei | head --bytes -100 | sha1sum | cut -d' ' -f1
Das spart mir dann bei großen Datei jeweils das lästige hin und her kopieren, denke ich mal :)
... und wo ist das noch offene Problem? ;-)

Sieht doch gut aus. Ich weiss keinen besseren Ansatz.
Use ed once in a while!

eggy
Beiträge: 3331
Registriert: 10.05.2008 11:23:50

Re: XY bytes von einer Datei abschneiden

Beitrag von eggy » 26.02.2019 22:15:29

truncate gäbs auch noch in den coreutils

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: XY bytes von einer Datei abschneiden

Beitrag von Meillo » 26.02.2019 22:18:21

eggy hat geschrieben: ↑ zum Beitrag ↑
26.02.2019 22:11:04
Meillo hat geschrieben: ↑ zum Beitrag ↑
26.02.2019 21:47:10
Split(1) macht aus einer Datei gleichgrosse Teile und zwar soviele bis die Datei komplett aufgeteilt ist und kein Teil groesser als die angegebene Groesse ist. Das scheint nicht das zu sein was du suchst.
Doch, man muss nur die Größe richtig angeben:
Du willst 10 cm vom Kuchen, also ist "irgendwas + 10 cm = der ganze Kuchen", kann man umstellen zu "irgendwas = Kuchen - 10cm", schneiden wir den Kuchen vorne ein "irgendwasgroßes" Stück ab, bleibt der Rest von genau 10cm und so gehts auch mit split.
Der Trick ist halt, dass man nicht die Größe vom Rest angibt, sondern vorher ausrechnet, was "alles ohne den Rest" ist, und dann da schneidet.
Das funktioniert aber nur wenn der Rest kleiner als die Haelfte vom Kuchen ist. Wenn du mit split(1) von einem 11cm-Kuchen die letzten 10cm haben willst, dann scheidest du vorne 1cm ab ... und bekommst dann elf 1cm-Stuecke. ;-)

Wenn man nur ein kleines Stueckchen am Ende abschneiden will, dann geht das so (wobei fuer beide Teile dann Dateien angelegt werden), im allgemeinen Fall geht es aber nicht. Head/tail funktioniert immer, ist einfacher zu verwenden und kann nur den gewuenschten Teil auf stdout ausgeben. Das spricht aus meiner Sicht alles dafuer.

(Es aendert aber nichts daran, dass split(1) ein cooles und viel zu unbekanntes Tool ist. Man darf das ruhig hin und wieder einsetzen. Anschliessend kann man dann auch mal noch einen Blick auf csplit(1) werfen ... das ist noch viel cooler. :-D )
Use ed once in a while!

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: XY bytes von einer Datei abschneiden

Beitrag von Meillo » 26.02.2019 22:20:25

eggy hat geschrieben: ↑ zum Beitrag ↑
26.02.2019 22:15:29
truncate gäbs auch noch in den coreutils
... wenn man die Datei veraendern will.

Aber danke fuer diesen Hinweis. Ich wollte schon genau diese Nachfrage stellen, weil ich einen Usecase dafuer habe ... und ich einfach nicht auf truncate(1) gekommen bin. Du hast damit meine Frage beantwortet bevor ich sie gestellt habe. :THX:
Use ed once in a while!

eggy
Beiträge: 3331
Registriert: 10.05.2008 11:23:50

Re: XY bytes von einer Datei abschneiden

Beitrag von eggy » 26.02.2019 22:22:17

Meillo hat geschrieben: ↑ zum Beitrag ↑
26.02.2019 22:18:21
Das funktioniert aber nur wenn der Rest kleiner als die Haelfte vom Kuchen ist. Wenn du mit split(1) von einem 11cm-Kuchen die letzten 10cm haben willst, dann scheidest du vorne 1cm ab ... und bekommst dann elf 1cm-Stuecke. ;-)
Och, dann kleb ich mir die falschen zehn Stück halt wieder zusammen.
... Davon, dass es nicht umständlich sein sollte hatte ren22 ja zum Glück nix gesagt :mrgreen:

eggy
Beiträge: 3331
Registriert: 10.05.2008 11:23:50

Re: XY bytes von einer Datei abschneiden

Beitrag von eggy » 26.02.2019 22:28:39

Meillo hat geschrieben: ↑ zum Beitrag ↑
26.02.2019 22:20:25
Aber danke fuer diesen Hinweis. Ich wollte schon genau diese Nachfrage stellen, weil ich einen Usecase dafuer habe ... und ich einfach nicht auf truncate(1) gekommen bin. Du hast damit meine Frage beantwortet bevor ich sie gestellt habe. :THX:
Keine Ursache, bin vorhin auch nicht drauf gekommen und hab deswegen grad nochmal "apt-cache show coreutils" überflogen. Ich vergess leider auch regelmässig welche coolen Tools es da so alles gibt. Moreutils ist auch so ein Kandidat.

tobo
Beiträge: 1964
Registriert: 10.12.2008 10:51:41

Re: XY bytes von einer Datei abschneiden

Beitrag von tobo » 26.02.2019 22:59:32

ren22 hat geschrieben: ↑ zum Beitrag ↑
26.02.2019 22:05:23
also meine aktuelle Variante ist, da ich von der Datei 100 bytes abschneiden muss um die korrekte sha1sum zu bekommen, folgende:

Code: Alles auswählen

cat datei | head --bytes -100 | sha1sum | cut -d' ' -f1
Head kann auch ein Dateiparameter mitgegeben werden:

Code: Alles auswählen

head --bytes -100 datei | sha1sum | cut -d' ' -f1
Was ich aber eigentlich sagen will und als Alternative: abschneiden, schon dem Wort nach, schreit doch förmlich nach:

Code: Alles auswählen

cut --bytes -100 datei | sha1sum | cut -d' ' -f1
Edit: Ok, jetzt verstehe ich, wieso das noch nicht vorgeschlagen wurde - der abschließende NL ist natürlich nicht erwünscht. Könnte man noch nacharbeiten, aber head ist dann doch einfacher...
Edit2: Oh man, ist das bitter!? Rote Stirn, kaputte Tischplatte und oben bitte gedanklich alles entfernen, bis auf das uuoc.

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: XY bytes von einer Datei abschneiden

Beitrag von Meillo » 27.02.2019 05:52:06

eggy hat geschrieben: ↑ zum Beitrag ↑
26.02.2019 22:22:17
Meillo hat geschrieben: ↑ zum Beitrag ↑
26.02.2019 22:18:21
Das funktioniert aber nur wenn der Rest kleiner als die Haelfte vom Kuchen ist. Wenn du mit split(1) von einem 11cm-Kuchen die letzten 10cm haben willst, dann scheidest du vorne 1cm ab ... und bekommst dann elf 1cm-Stuecke. ;-)
Och, dann kleb ich mir die falschen zehn Stück halt wieder zusammen.
... Davon, dass es nicht umständlich sein sollte hatte ren22 ja zum Glück nix gesagt :mrgreen:
:THX:
Use ed once in a while!

Antworten