Rimuovere la prima riga nel file di testo senza allocare memoria per l'intero file di testo

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

  •  05-07-2019
  •  | 
  •  

Domanda

Ho un file di testo molto grande e tutto quello che devo fare è rimuovere una singola riga dalla parte superiore del file. Idealmente, sarebbe fatto in PHP, ma qualsiasi comando unix funzionerebbe bene. Sto pensando di poter semplicemente eseguire lo streaming all'inizio del file fino a raggiungere \ n, ma non sono sicuro di come lo faccio.

Grazie, Matt Mueller

È stato utile?

Soluzione

sed -i -e '1d' file farà quello che vuoi.

  • -i indica " sul posto "
  • -e significa " valuta questa espressione "
  • '1d' significa, eliminare la prima riga

Altri suggerimenti

puoi usare una varietà di strumenti in * nix. Un confronto di alcuni dei diversi metodi su un file con oltre 1,5 milioni di righe.

$ 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

Se il tuo file è piatto, puoi usare file sed '1d' > newfile

Supponendo la coda dai coreutils GNU:

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

La coda con un numero positivo emette tutto a partire dalla linea N-esima.

Prova il seguente comando:

sed -n '2,$p' file

Non so quanto sia grande il tuo file, ma hai provato awk 'NR > 1 '{stampa} ?

Sono un po 'arrugginito su perl, ma questo potrebbe fare il trucco:

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

e usa questo script come 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
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top