Ich habe eine ganze Reihe von Dateien in einem Verzeichnis und von jeder Datei möchte ich die erste Zeile entfernen (einschließlich Wagenrücklauf). Ich kann die ganze Datei in ein Array von Strings lesen und alle außer dem ersten Element in eine neue Datei schreiben, aber das sieht für mich etwas umständlich aus, gibt es bessere Möglichkeiten? Oh, die bevorzugte Sprache ist Perl.Perl: Wie entferne ich die erste Zeile einer Datei, ohne ganze Datei zu lesen und zu kopieren
Antwort
Versuchen Sie diesen Einzeiler
perl -pi -e '$_ = "" if ($. == 1);' filename
ich es vorher verwendet haben, sollte alles, was Sie sein müssen.
+1 Niemals mehr als eine Zeile gleichzeitig speichern. – mob
Können Sie erklären, wie das funktioniert? – FistOfFury
im Grunde sagt es run Perl, Parse an Ort und Stelle die folgende Codezeile aus. Die folgende Zeile verwendet die Standardvariable $ _, die in diesem Fall die durch die Option -p eingelesene Zeile ist. $. ist die Zeilennummer des Dateinamens. Wenn also die Zeilennummer == 1 ist, dann setze den Text der Zeile auf "". –
use Tie::File qw();
for my $filename (glob 'some_where/some_files*') {
tie my @file, 'Tie::File', $filename or die "Could not open $filename: $!";
shift @file;
}
+1 wenn nur für deine PS. :) –
Beachten Sie, dass dies immer noch die gesamte Datei lesen und kopieren muss, aber das ist inhärent in dem Problem. Ich kenne kein Betriebssystem, das eine andere Möglichkeit bietet, Daten vom Anfang einer Datei zu entfernen. – cjm
Krawatte :: Datei ist meine offensichtliche Wahl, weil es ausdrücklich geschrieben wurde, um mit genau dieser Problemkategorie effizient umzugehen. – daxim
perl -n -i -e 'print unless $. == 1' myfile
Dies ist ähnlich der Antwort von Stocherilac.
Aber in jedem Fall (und in allen anderen Antworten gegeben!) Sie lesen immer die vollständige Datei. Keine Möglichkeit, das zu vermeiden, AFAIK.
+1 für mehr als eine Möglichkeit, es zu tun :) –
+1 für eine (IMHO) besser lesbare Version. –
In Windows unter MinGW Konsole löschte ich meine Datei "Kann Inplace nicht bearbeiten auf Myfile: Berechtigung verweigert" – user869097
Wie wäre es
tail +2
in der Schale?
(edit: in neueren Linux können Sie benötigen tail -n +2
(danke, GNU :()!)
Oh die gewünschte Sprache ist Perl
Manchmal sed
ein sed
besser als. sogar perl:
sed -i 1d *
Wie Schwern wies darauf hin, hat die folgende nicht einen frühzeitigen Ausstieg durchführen, wie ich ursprünglich gedacht hatte, es würde:
perl -pi -e '$_ = q// and last if $. == 1;' myFile
Scheint wie ein kann nicht vermeiden Verarbeitung der gesamten Datei, nachdem alle.
Dies tut nicht, was Sie denken, dass es tut. Wenn dies der Fall wäre, würde dies die Funktionsweise von Dateien unter Unix verletzen. Was wirklich passiert, ist '$ _ =" "' ist immer falsch, also ist '$ _ =" "und" last "dasselbe wie" 0 and last ".Es schließt kurz und ruft niemals 'last'. Sie haben geschrieben: 'perl -pi e '$ _ = q // if $. == 1 'myFile' ist eine clevere Möglichkeit, die erste Zeile nicht zu drucken, liest aber auf jeden Fall die ganze Datei. Führen Sie mit "-MO = Deparse" aus, um den Code abzurufen und im Debugger auszuführen. 'tu {dies; Das; } wenn etwas ein sichereres Konstrukt ist. – Schwern
@Schwern: Mein schlechtes. Es hat eine Weile gedauert, bis deine Erklärung unterging, aber ich verstehe deinen Standpunkt. – Zaid
- 1. Nur die erste Zeile einer Datei lesen?
- 2. zu finden, ohne die gesamte Datei lesen
- 3. Wie kann ich die erste Zeile aus der Datei lesen?
- 4. Zeile aus Datei lesen, ohne die Zeilenlänge zu kennen
- 5. C Entfernen Sie die erste Zeile aus einer Textdatei, ohne die Datei neu zu schreiben.
- 6. Wie binäre Daten einer Datei zu kopieren
- 7. Wie kann ich vier bestimmte Zeilen einer Datei lesen, ohne die gesamte Datei in Python zu lesen?
- 8. Was ist der effizienteste Weg, nur die erste Zeile einer Datei in Node JS zu lesen?
- 9. Erste Bytes einer Datei lesen
- 10. Lesen einer Datei ohne Zeilenumbrüche
- 11. Node.js v0.10: Ersetzen Sie bestimmte Bytes in der Datei ohne ganze Datei zu lesen
- 12. Wie überspringe die erste Zeile einer Datei in Python
- 13. Ordner/Datei kopieren ohne Attribute zu ändern?
- 14. Wie struct Datei zu kopieren?
- 15. Lesen von Datei ohne es zu sperren
- 16. Schätzung der Wortzählung einer Datei ohne die vollständige Datei zu lesen
- 17. Perl Zeile für Zeile lesen
- 18. Git: ganze Datei zu stdout
- 19. node.js/100 erste Bytes einer Datei lesen
- 20. Regex und Datei lesen Zeile in Autohotley
- 21. Der Versuch, die erste Zeile der CSV-Datei zu lesen, gibt ['/'] zurück
- 22. VBA zu lesen Eingabe aus einer Datei
- 23. Wie kann ich die erste und die letzte Zeile einer Datei in PHP
- 24. Perl: Datei von einem Ort zu einem anderen kopieren
- 25. lesen die letzte geänderte Datei in Perl
- 26. lesen csv-Datei ohne für
- 27. Lesen von .csv in Python, ohne die gesamte Datei durchzublättern?
- 28. Ersetzen eine Zeile in einer Datei, ohne die gesamte Datei zu Umschreiben (in PHP)
- 29. Vala lesen Datei Zeile für Zeile
- 30. Datei bis zu einem Zeichen lesen
Dies ist unmöglich, weil Dateien gespeichert sind. Sie müssen immer die gesamte Datei lesen und alles außer der ersten Zeile schreiben - das OS hat keine andere Möglichkeit. – Konerak