Recuperar os últimos 100 registros de linhas

164

Preciso recuperar as últimas 100 linhas de logs do arquivo de log. Eu tentei o comando sed

sed -n -e '100,$p' logfilename

Informe-me como posso alterar este comando para recuperar especificamente as últimas 100 linhas.

Surabhi
fonte
Isso é mencionado no manual: gnu.org/software/sed/manual/html_node/tail.html#tail , como o sed pode emular a cauda.
Lars Fischer
1
tail -f -n 100 logfilename
Bharti

Respostas:

302

Você pode usar o comando tail da seguinte maneira:

tail -100 <log file>   > newLogfile

Agora, as últimas 100 linhas estarão presentes em newLogfile

EDITAR:

Versões mais recentes da cauda, ​​conforme mencionado pelo comando twalberg use:

tail -n 100 <log file>   > newLogfile
Steephen
fonte
17
Note que algumas versões mais recentes do tailrequerem a sintaxe tail -n 100 <filename>...
twalberg
14

Veja, o script sed que imprime as 100 últimas linhas que você pode encontrar na documentação do sed ( https://www.gnu.org/software/sed/manual/sed.html#tail ):

$ cat sed.cmd
1! {; H; g; }
1,100 !s/[^\n]*\n//
$p

$ sed -nf sed.cmd logfilename

Para mim, é muito mais difícil que o seu script,

tail -n 100 logfilename

é muito mais simples. E é bastante eficiente, não lerá todos os arquivos se não for necessário. Veja minha resposta com o relatório strace para tail ./huge-file: /unix/102905/does-tail-read-the-whole-file/102910#102910

Comunidade
fonte
13

"tail" é um comando para exibir a última parte de um arquivo, usando as opções disponíveis adequadas nos ajuda a obter uma saída mais específica. a opção mais usada para mim é -n e -f

SINOPSE

cauda [-F | -f -r] [-q] [-b número | -c número | -n número] [arquivo ...]

Aqui

-n number: O local é um número de linhas.

-f: A opção -f faz com que a cauda não pare quando o final do arquivo for atingido, mas espere que dados adicionais sejam anexados à entrada. A opção -f será ignorada se a entrada padrão for um canal, mas não se for um FIFO.

Recuperar os últimos 100 registros de linhas

To get last static 100 lines  
     tail -n 100 <file path>

To get real time last 100 lines
     tail -f -n 100 <file path>
Amitesh Bharti
fonte
3

Eu sei que isso é muito antigo, mas, para quem quer que seja, ajuda.

less +F my_log_file.log

isso é apenas básico, com menos você pode fazer coisas muito mais poderosas. Depois de começar a ver os logs, você pode pesquisar, acessar o número da linha, pesquisar padrões e muito mais, além de ser mais rápido para arquivos grandes.

é como vim para logs [totalmente minha opinião]

documentação original do less: https://linux.die.net/man/1/less

menos cheatsheet: https://gist.github.com/glnds/8862214

mdsadiq
fonte
1
len=`cat filename | wc -l`
len=$(( $len + 1 ))
l=$(( $len - 99 ))
sed -n "${l},${len}p" filename

a primeira linha pega o comprimento (Total de linhas) do arquivo e depois +1 no total de linhas; depois disso, temos que buscar 100 registros, -99 do total, basta colocar as variáveis ​​no comando sed para buscar as últimas 100 linhas do arquivo

Eu espero que isso te ajude.

axy_1976
fonte