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

War es hilfreich?

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
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top