Kopieren Sie große Dateien, die die erste Zeile mit dd unter Linux überspringen

742
Jimson Kannanthara James

Ich habe versucht, den Inhalt einer riesigen Datei (10 GB) in eine andere zu kopieren und die erste Zeile (wie in head -n1) zu überspringen . Ich habe verschiedene Arten von Kopf, Schwanz, Axt und Sed ausprobiert. Eingesetzt bei der Verwendungtail -n+2 > ./xab.1

siehe link1 link2 link3 . Die Verarbeitung benötigt jedoch eine Protokollierungszeit. Mehr als das braucht es cp.

Ich möchte nur den Inhalt blind kopieren, das ist alles. Ich denke, ich ddwerde den Job machen, aber ich bin ratlos bei der Umsetzung. Irgendeine Hilfe?

Um mehr Kontext zu geben, ist die Datei CSV und daher denke ich, dass dd if=/dev/zero of=/path/to/file bs=1 seek=1 count=<<length(head -n1 /path/to/file)>> conv=notruncdas funktionieren sollte.

Aber wie soll es funktionieren?

EDIT: Also hier ist was ich mir bis jetzt ausgedacht habe (ja, ich weiß, dass ich ein paar Platten verlieren werde. Aber das spielt keine Rolle)

#!/bin/bash echo "Initiating xaa." `date` head -n3 /stage/csv/dev/data/csv_huge/xaa > /stage/csv/dev/data/csv_huge/csv/header tail -n3 /stage/csv/dev/data/csv_huge/xbc > /stage/csv/dev/data/csv_huge/csv/trailer sed -i '$ d' /stage/csv/dev/data/csv_huge/xaa cat /stage/csv/dev/data/csv_huge/csv/trailer >> /stage/csv/dev/data/csv_huge/xaa mv /stage/csv/dev/data/csv_huge/xaa /stage/csv/dev/data/csv_huge/csv/xaa echo "Completed xaa." `date` sed -i 1d /stage/csv/dev/data/csv_huge/xab sed -i '$ d' /stage/csv/dev/data/csv_huge/xab cat /stage/csv/dev/data/csv_huge/csv/header /stage/csv/dev/data/csv_huge/xab > /stage/csv/dev/data/csv_huge/csv/xab cat /stage/csv/dev/data/csv_huge/csv/trailer >> /stage/csv/dev/data/csv_huge/csv/xab rm -f /stage/csv/dev/data/csv_huge/xab echo "Completed xab." `date` sed -i 1d /stage/csv/dev/data/csv_huge/xbc cat /stage/csv/dev/data/csv_huge/csv/header /stage/csv/dev/data/csv_huge/xbc > /stage/csv/dev/data/csv_huge/csv/xbc echo "Completed xbc." `date` 
0
Dies scheint eine sehr gefährliche Verwendung von `dd` (aka Destroy Disk) zu sein. Das Definieren Ihres "if" als / dev / zero scheint auch weit entfernt zu sein. Ihre Zählung wäre auch die Länge der ersten Zeile, nicht die Länge der Datei ohne Überschrift. Sie sollten trotzdem davon ausgehen, dass dies eine Weile dauern wird, und TBH gibt es keinen zwingenden Grund, die Datei nicht einfach zu kopieren und dann die oberste Zeile zu löschen. Ich muss davon ausgehen, dass Sie das alles aus unpraktischen Gründen tun. Frank Thomas vor 9 Jahren 0
@FrankThomas Ich bin definitiv für "nur die Datei cp und dann die oberste Zeile löschen". Aber wie man das für eine 10GB-Datei macht, ist für mich ein Problem. Irgendeine Idee, die mir in den Sinn kommt? Jimson Kannanthara James vor 9 Jahren 0
Sie haben bereits einige der beliebtesten Ideen als zu langsam abgelehnt, aber es gibt ein paar andere hier: http://superuser.com/questions/284258/remove-first-line-in-bash Frank Thomas vor 9 Jahren 0
http://superuser.com/questions/284258/remove-first-line-in-bash - Antwort hinzugefügt, wie `dd` verwendet wird Hannu vor 9 Jahren 0
@FrankThomas das war cool. Bitte sehen Sie sich die Frage an, die ich mit diesem Kommentar bearbeitet habe. Lassen Sie mich wissen, was Sie denken. Jimson Kannanthara James vor 9 Jahren 0
@ Hannu Will sicher den `dd'-Ansatz ausprobieren. Jimson Kannanthara James vor 9 Jahren 0
Bei Gigabytes an Daten füllen Sie schon bald Treiberpuffer. Die Lese- / Schreibgeschwindigkeit der betroffenen Laufwerke wirkt sich unabhängig von der Dateipufferung (z. B. `bs =` für `dd`) auf begrenzende Weise aus. Hannu vor 9 Jahren 0
@ Hannu denkt daran, diese beiden Ansätze miteinander zu vergleichen. Jimson Kannanthara James vor 9 Jahren 0
Um das oben Gesagte zu betonen, müssen Sie das Wissen haben, dass Sie einige geek'y Fahrgeschwindigkeitstests durchführen. Ich würde sagen, dass Sie * je * unterschiedliche Ergebnisse erhalten, je nachdem, welche Laufwerke Sie verwenden. Laufwerkstechnologie, Puffer, Hardwaretreiber, Dateisystem und Systemaufwand erhöhen die Komplexität der Aufgabe und machen die Vorhersage der Ergebnisse schwierig. Hannu vor 9 Jahren 0

0 Antworten auf die Frage