Elimine la primera línea del archivo de texto sin asignar memoria para todo el archivo de texto

StackOverflow https://stackoverflow.com/questions/1802757

  •  05-07-2019
  •  | 
  •  

Pregunta

Tengo un archivo de texto muy grande y todo lo que necesito hacer es eliminar una sola línea de la parte superior del archivo. Idealmente, se haría en PHP, pero cualquier comando de Unix funcionaría bien. Estoy pensando que puedo transmitir a través del comienzo del archivo hasta llegar a \ n, pero no estoy seguro de cómo hacerlo.

Gracias Matt Mueller

¿Fue útil?

Solución

sed -i -e '1d' file hará lo que quiera.

  • -i indica " en el lugar "
  • -e significa " evaluar esta expresión "
  • '1d' significa, eliminar la primera línea

Otros consejos

puede usar una variedad de herramientas en * nix. Una comparación de algunos de los diferentes métodos en un archivo con más de 1.5 millones de líneas.

$ 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

Si su archivo es plano, puede usar sed '1d' file > archivo nuevo

Asumiendo cola de GNU coreutils:

tail -n +2 file > newfile
tail -n +2 < source > destination

La cola con número positivo genera todo lo que comienza con la enésima línea.

Pruebe el siguiente comando:

sed -n '2,$p' file

No sé qué tan grande es su archivo, pero ¿intentó con awk 'NR > 1 '{print} ?

Estoy un poco oxidado en Perl, pero esto podría hacer el truco:

#!/usr/bin/perl
$first = true;
while (<>)
{
    if ($first)
    {
        # skip first line
        $first = false;
    }
    else
    {
        print;
    }
}

y use este script como filtro:

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
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top