Pobierz dzienniki ostatnich 100 wierszy

164

Muszę pobrać ostatnie 100 wierszy dzienników z pliku dziennika. Wypróbowałem polecenie sed

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

Daj mi znać, jak mogę zmienić to polecenie, aby konkretnie pobrać ostatnie 100 wierszy.

Surabhi
źródło
Jest o tym mowa w podręczniku: gnu.org/software/sed/manual/html_node/tail.html#tail , jak sed może emulować tail.
Lars Fischer
1
tail -f -n 100 logfilename
Amitesh Bharti

Odpowiedzi:

302

Możesz użyć polecenia tail w następujący sposób:

tail -100 <log file>   > newLogfile

Teraz ostatnie 100 wierszy będzie obecnych w formacie newLogfile

EDYTOWAĆ:

Nowsze wersje taila, jak wspomina twalberg, użyj polecenia:

tail -n 100 <log file>   > newLogfile
Steephen
źródło
17
Zwróć uwagę, że niektóre nowsze wersje tailwymagają składni tail -n 100 <filename>...
twalberg
14

Spójrz, skrypt seda, który wypisuje 100 ostatnich linii, które możesz znaleźć w dokumentacji seda ( 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

Dla mnie jest to o wiele trudniejsze niż twój scenariusz

tail -n 100 logfilename

jest dużo prostsze. I jest dość wydajny, nie odczyta całego pliku, jeśli nie jest to konieczne. Zobacz moją odpowiedź z raportem strace dla tail ./huge-file: /unix/102905/does-tail-read-the-whole-file/102910#102910

Społeczność
źródło
13

"tail" jest poleceniem wyświetlającym ostatnią część pliku, użycie odpowiednich dostępnych przełączników pomaga nam uzyskać bardziej szczegółowe dane wyjściowe. najczęściej używanym przełącznikiem dla mnie jest -n i -f

STRESZCZENIE

ogon [-F | -f | -r] [-q] [-b liczba | -c liczba | -n numer] [plik ...]

Tutaj

-n liczba: lokalizacja to linie liczbowe.

-f: Opcja -f powoduje, że tail nie zatrzymuje się po osiągnięciu końca pliku, ale raczej czeka na dodanie dodatkowych danych do wejścia. Opcja -f jest ignorowana, jeśli standardowym wejściem jest potok, ale nie, jeśli jest to FIFO.

Pobierz dzienniki ostatnich 100 wierszy

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
źródło
3

Wiem, że to bardzo stare, ale komukolwiek to może pomóc.

less +F my_log_file.log

to po prostu podstawa, mając mniej, możesz zrobić o wiele potężniejsze rzeczy. gdy zaczniesz widzieć dzienniki, możesz przeprowadzić wyszukiwanie, przejść do numeru wiersza, wyszukać wzorzec, i wiele więcej, a także jest szybszy w przypadku dużych plików.

to jak vim dla logów [całkowicie moja opinia]

oryginalna dokumentacja less: https://linux.die.net/man/1/less

mniej ściągawki: https://gist.github.com/glnds/8862214

mdsadiq
źródło
1
len=`cat filename | wc -l`
len=$(( $len + 1 ))
l=$(( $len - 99 ))
sed -n "${l},${len}p" filename

pierwsza linia przyjmuje długość (Całkowita liczba wierszy) pliku, a następnie +1 w sumie wierszy, po czym musimy pobrać 100 rekordów, więc -99 z całkowitej długości, a następnie po prostu wstaw zmienne w poleceniu sed, aby pobrać ostatnie 100 wierszy z pliku

Mam nadzieję, że to Ci pomoże.

axy_1976
źródło