sobrescreve primeiro n linhas de um arquivo

3

Eu tenho um arquivo de texto de 7GB
Eu preciso editar n primeiras linhas desse arquivo (vamos assumir n = 50)
Eu quero fazer isso da seguinte maneira:

head -n 50 myfile >> tmp
vim tmp # make necessary edits
substitute first 50 lines of myfile with the contents of tmp
rm tmp

como eu concluo a terceira etapa aqui? melhores soluções para o problema geral também são apreciadas observação: não há GUI neste ambiente

    
por Alex Agapov 12.11.2016 / 09:49

3 respostas

4

man tail diz:

   -n, --lines=[+]NUM
          output the last NUM lines, instead of the last 10;
          or use -n +NUM to output starting with line NUM

portanto, você pode fazer

tail -n +51 myfile >>tmp
    
por 12.11.2016 / 09:55
-1

Faça um backup

cp fileorig.txt fileold.txt

copie 50 linhas em tmp.txt

head -n 50 fileorig.txt > tmp.txt

faça as edições necessárias com o vim

vim tmp.txt

Para fazer a coisa 3d fazer isso

Primeiro, remova as primeiras 50 linhas com sed

sed -i 1,50d fileorig.txt

em seguida, cat tmp editado + fileorig.txt no newfile

cat tmp.txt fileorig.txt > filenew.txt

Veja filenew.txt se você gosta se algo der errado restaurar bacckup

cp fileold.txt fileorig.txt
    
por 12.11.2016 / 10:02
-1

encontrou uma solução

head -n 50 myfile > tmp
vim tmp # make necessary edits
cat tmp > result
tail -n 50 myfile >> result
# result now contains the edited myfile
    
por 12.11.2016 / 10:03

Tags