Variantes desta pergunta certamente foram feitas várias vezes em lugares diferentes, mas estou tentando remover as últimas M
linhas de um arquivo sem sorte.
A resposta segundo mais votado em esta pergunta recomenda fazer o seguinte para se livrar da última linha em um arquivo:
head -n -1 foo.txt > temp.txt
No entanto, quando tento isso no OSX e no Zsh, recebo:
head: illegal line count -- -1
Por que é que? Como posso remover as M
últimas linhas e as primeiras N
linhas de um determinado arquivo?
head --version
? Que sistema voce está usando?head --version
retorna um erro, na verdade.Respostas:
Você pode remover as 12 primeiras linhas com:
(Isso significa imprimir a partir da 13ª linha.)
Algumas implementações do suporte ao
head
GNU comohead
:mas isso não é padrão.
funcionaria nos sistemas que possuem
tail -r
(veja também GNUtac
), mas é sub-ideal.Onde
n
fica 1:Você também pode fazer:
para remover 2 linhas, mas isso não é o ideal.
Você pode fazer:
Mas cuidado, isso não funcionará com grandes valores de n em algumas
sed
implementações.Com
awk
:Para remover
m
linhas do começo en
do fim:fonte
sed 'x;1d;$d'
pode ser usado para obter as duas últimas linhas também. E um par deN
segundos depois1d
pode ser usado para obter um pouco mais do que isso, embora nesse momento não ofereça nenhuma vantagem sobre oN;P;D
loop que você já recomenda.m
oun
é0
. Caso contrário, seria perfeito.Você pode usar a seguinte maneira para remover as primeiras N linhas e as últimas M linhas.
Com
N=5
,M=7
e arquivotest.txt
:O comando imprime todas as linhas de N + 1 para LastLine-M.
Outra opção é usar python:
fonte
Você pode remover as últimas
M
(aqui M = 100) linhas de um arquivo com:fonte