Posted By: CePal () on 'CZunix' Title: Re: pocitani vyskytu - awk Date: Tue Apr 14 12:17:36 2015 Kdysi jsem potreboval to same a nejrychlejsi byl perl. Dnes by asi byl rychlejsi ruby on rails... Kazdopadne tohle se da vyguglit. Potrebujes algoritmus s linearni vypocetni narocnosti (lepsi to uz byt nemuze diky nutnosti precist celej soubor), v nejakem interpretu, kterej umi dobre vyuzivat filesystem cache a kterej si umi ohlidat (pripadne mu lze naridit) pretekani pameti (treba WIndowsovskej Notepad nacte celej soubor do RAM, coz u vetsich souboru a PC s mensi RAM zpusobuje prusery zeano, podobne midnight commander pro listovani solid archivu rozbaluje archiv do /tmp a nekontroluje si, zda /tmp filesystem ma dost volne kapacity, takze at uz si prechodna data & cache udrzujes v jakekoliv forme, je treba ujistit se, ze nepreteces kapacitu, zvlast pokud to pocitas na produkcnim byznys serveru). CePal > Ahoj lidi, > mam nasledujici libustku: velikansky soubor dat, desitky milionu radku, > kde se (znacne) opakuji hodnoty, a tech unikatnich hodnot neni az tak moc > (rekneme do tisice, vetsinou dokonce jen desitky). > > Obcas potrebuju spocitat, kolik ceho tam je. Hodil by se mi tedy vypis typu > hodnota - count. Nejdriv jsem to bral fakt hrubou silou: > for i in `cat | cut | sort -u`; do cat | cut | grep | wc -l; done > > To fungovalo u mensich souboru, u tech milionu a vice radek uz fakt ne. :) > Samozrejme me opet zachranil awk, ktery to umi na "prvni dobrou", cili jeden > > prujezd bez jakekoli pajpy, tzn. rychlost o nekolik radu jinde. Pokud by > tedy > nekdo potreboval (hodnoty oddelene carkou a to, co me zajima, je 5. > sloupec): > > awk -F, '{i[$5]++} END{for (j in i) print i[j], j}' > > > Piece of cake. :) > > > jimo:) > [ A project manager is a person who thinks > nine women can deliver a baby in one month. ] CePal