Remover primeiro n linhas de um arquivo de texto grande

41

Eu preciso remover as primeiras 42 linhas de um dump SQL de 2 GB.

Eu sei que posso ver as primeiras linhas usando:

head -n 44 dump.sql

Mas existe alguma maneira de editá-los ou removê-los?

    
por Kohjah Breese 24.01.2014 / 18:44

6 respostas

9

Este parece ser o mais fácil:

sed '1,42d' test.sql > test2.sql

Remova as linhas 1-42 do test.sql e salve como test2.sql

    
por Kohjah Breese 24.01.2014 / 18:57
57

Se você quiser apenas ver as linhas do 43 em diante, você pode usar

tail -n +43 dump.sql

O sinal + é importante - sem ele, tail imprimirá as <últimas> últimas 43 linhas. Alternativamente com 'sed'

sed 1,42d dump.sql

Se você quiser realmente apagar as primeiras 42 linhas do arquivo original, então você pode fazer o sed fazer a mudança no local com a opção -i

sed -i 1,42d dump.sql
    
por steeldriver 24.01.2014 / 18:58
9

tente isso,

tail -n +43 dump.sql > dump_new.sql

    
por ptantiku 24.01.2014 / 18:59
3

Você pode usar o Vim no modo Ex:

ex -sc '1d42|x' dump.sql
  1. 1 passar para a primeira linha

  2. 42 selecione 42 linhas

  3. d delete

  4. x salvar e fechar

por Steven Penny 16.04.2016 / 23:16
0

Desculpe, não posso fornecer código real agora. No entanto, tente ver algo nos moldes de

tail -n arcv('wc -l') -44

O que isto deve fazer (uma vez formatado corretamente) é contar o número de linhas no arquivo (wc -l), subtrair 44 dele (-44) e depois imprimir tudo a partir da 45ª linha do arquivo. / p>

Espero que isso ajude e boa sorte.

    
por kb2bcg 24.01.2014 / 18:54
0

Tente isso,

head -n 42 dump.sql > tmp; cat dump.sql | grep -vxf tmp > dump.sql.new; rm tmp

ou

a=$(cat dump.sql| wc -l); tail -n "$((a-42))" dump.sql > dump.sql.new
    
por souravc 24.01.2014 / 18:54