Portál AbcLinuxu, 4. června 2025 06:51


Dotaz: velmi velky log file- ako ho shrinknut

9.2.2011 13:21 mfo
velmi velky log file- ako ho shrinknut
Přečteno: 552×
Odpovědět | Admin
Zdravim Vas, Kolega sa na man obratil s jednoduchou otazkou. ako zmensit 5Gb log file. Situacia ja nasledovna, file size ~5GB, chce najakych 1 000 000 riadkov uchovat v subore. Mna napadlo len jedna jednoducha vec, ja viem nic moc: tail -n 1000000> new_file.txt >old_file.txt cat new_file.txt>old_file.txt no lenze spracovavat tailom 5Gb sa mi naozaj nechce - kvoli casu. Najde sa nejake elegantnejsie riesenie??

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Ruža Becelin avatar 9.2.2011 13:40 Ruža Becelin | skóre: 40 | blog: RuzaBecelinBlog
Rozbalit Rozbalit vše Re: velmi velky log file- ako ho shrinknut
Odpovědět | | Sbalit | Link | Blokovat | Admin
Zkus logrotate.
Jakub Lucký avatar 9.2.2011 13:42 Jakub Lucký | skóre: 40 | Praha
Rozbalit Rozbalit vše Re: velmi velky log file- ako ho shrinknut
Odpovědět | | Sbalit | Link | Blokovat | Admin
man split
If you understand, things are just as they are; if you do not understand, things are just as they are.
9.2.2011 15:10 rastos | skóre: 63 | blog: rastos
Rozbalit Rozbalit vše Re: velmi velky log file- ako ho shrinknut
Odpovědět | | Sbalit | Link | Blokovat | Admin
tail -n 1000000> new_file.txt *>old_file.txt cat new_file.txt>old_file.txt
Ale to je elegantné riešenie. Teda ... keď sa to fixne tak, aby to bolo správne

tail -n 1000000 old_file.txt > new_file.txt ; mv new_file.txt old_file.txt

Čo sa ti na tom nezdá? Dá sa to trocha optimalizovať, ak použiješ dd a vypočítaš si nejakú rozumnú hodnotu pre parameter skip= a obetuješ to, že prvý riadok vo výsledku asi nebude celý. Ale inak by som nad tým moc nešpekuloval.
9.2.2011 21:23 Filip Šimek | Praha
Rozbalit Rozbalit vše Re: velmi velky log file- ako ho shrinknut
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pokud jde o to, jak odlít z texťáku posledních milion řádků do nového souboru, tak tail bude optimální v tom smyslu, že mu stačí vstupní soubor přečíst jenom jednou.

Pokud na to nestačí paměť stroje, dalo by se to udělat za pomoci dvou čtení ze souboru (v bashi):
sed -n "$((`cat old_file.txt | wc -l` - 1000000)),$p" >new_file.txt
Vnitřek spočítá řádky ve vstupním souboru, bashovský výraz od toho odečte milion a sed potom vypíše jenom řádky od čísla, které vyšlo, do konce souboru.
9.2.2011 21:25 Filip Šimek | Praha
Rozbalit Rozbalit vše Re: velmi velky log file- ako ho shrinknut
...mezi druhýma uvozovkama a >new_file.txt chybí samozřejmě ještě jednou old_file.txt
10.2.2011 13:41 Atom321 | skóre: 20
Rozbalit Rozbalit vše Re: velmi velky log file- ako ho shrinknut
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nekomplikujte to, tail dovede procházet soubor od konce a nebude zpracovávat celých 5GB. Jednoduché řešení je správně:
tail -n 1000000 > new_file.txt && mv new_file.txt old_file
11.2.2011 21:14 Ash | skóre: 53
Rozbalit Rozbalit vše Re: velmi velky log file- ako ho shrinknut
Ale někde by to třeba zabralo :D

"Šéfe, dneska odpoledne po mě už nic nechtějte, teď jdu a budu zpracovávat opravdu velkej, PĚTIGIGABAJTOVEJ soubor. Tailem."
10.2.2011 15:08 kuka
Rozbalit Rozbalit vše Re: velmi velky log file- ako ho shrinknut
Odpovědět | | Sbalit | Link | Blokovat | Admin
5GB (asi to melo byt velke B) je velmi velky soubor? To bezi na nejakem starem telefonu nebo kde? Pocitam ze nez jsi napsal dotaz, mel by to ten tail udelane.
10.2.2011 19:42 mato
Rozbalit Rozbalit vše Re: velmi velky log file- ako ho shrinknut
mno, asi hej :) a hlavne ked bezis na raidz ZFS:)

$ du -m bigone
5423    bigone
$

$ wc -l bigone
 61998618 bigone
$

$ time tail -1000000 bigone > keepem

real    0m0.454s
user    0m0.077s
sys     0m0.267s

$ wc -l keepem
  999999 keepem
$
islo to rychlo kvoli tomu, ze som zobral staru ukradnutu DB orange/eurotel cisel z textoveho suboru, ktoru som niekolkokrat catol do tohto velkeho (cat orange1 orage2 eurotel1 eurotel2 .. > bigone), co trvalo asi 10sekund; nasledne som urobil tail

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.