Entfernen erste Zeile in Textdatei ohne Speicher für ganze Textdatei Zuteilen
-
05-07-2019 - |
Frage
Ich habe eine sehr große Textdatei und alles, was ich tun muß, ist eine einzige Zeile von oben aus der Datei zu entfernen. Idealerweise wäre es in PHP getan werden, aber ein Unix-Befehl würde gut funktionieren. Ich denke, ich kann einfach durch den Anfang der Datei streamen, bis ich \ n erreichen, aber ich bin nicht sicher, wie ich das tun.
Danke, Matt Mueller
Lösung
sed -i -e '1d' file
wird tun, was Sie wollen.
-
-i
zeigt "in-place" -
-e
bedeutet "bewerten diesen Ausdruck" -
'1d'
bedeutet, löschen Sie die erste Zeile
Andere Tipps
Sie können eine Vielzahl von Werkzeugen in * nichts verwenden. Ein Vergleich von einigen der verschiedenen Methoden auf eine Datei mit mehr als 1,5 Millionen Zeilen.
$ wc -l < file4
1700589
$ time sed -n '2,$p' file4 > /dev/null
real 0m2.538s
user 0m1.787s
sys 0m0.282s
$ time awk 'NR>1' file4 > /dev/null
real 0m2.174s
user 0m1.706s
sys 0m0.293s
$ time tail -n +2 file4 >/dev/null
real 0m0.264s
user 0m0.067s
sys 0m0.194s
$time more +2 file4 > /dev/null
real 0m11.771s
user 0m11.131s
sys 0m0.225s
$ time perl -ne 'print if $. > 1' file4 >/dev/null
real 0m3.592s
user 0m3.259s
sys 0m0.321s
Wenn Ihre Datei flach ist, können Sie sed '1d' file > newfile
verwenden
Unter der Annahme, Schwanz von GNU coreutils:
tail -n +2 file > newfile
tail -n +2 < source > destination
Schwanz mit positiver Zahl gibt alles mit N-ten Zeile beginnen.
Versuchen Sie den folgenden Befehl ein:
sed -n '2,$p' file
Ich weiß nicht, wie groß ist Ihre Datei, aber haben Sie versucht awk 'NR > 1' {print}
?
Ich bin ein bisschen rostig auf Perl, aber dies könnte den Trick tun:
#!/usr/bin/perl
$first = true;
while (<>)
{
if ($first)
{
# skip first line
$first = false;
}
else
{
print;
}
}
und verwenden Sie dieses Skript als Filter:
cat myfile.txt | removefirstline.pl > myfile_2.txt
function cutline($filename,$line_no=-1) {
$strip_return=FALSE;
$data=file($filename);
$pipe=fopen($filename,'w');
$size=count($data);
if($line_no==-1) $skip=$size-1;
else $skip=$line_no-1;
for($line=0;$line<$size;$line++)
if($line!=$skip)
fputs($pipe,$data[$line]);
else
$strip_return=TRUE;
return $strip_return;
}
cutline('foo.txt',1); // deletes line 1 in foo.txt
}