Jézusmáriaszentjózsef! Csak nem OV rejtőzködik a nick mögött? ;)
Bizony, ha így fogod fel, akkor beszóltam. Kinek? Hát annak, aki offtopic köntösbe bújtatva kritizál egy olyan programot, ami egyébként formailag hibátlan, a topicnyitó kérdését maradéktalanul lefedi és pontosan működik. Az ilyen tevékenység nem offtopic, nem kekeckedés, hanem felesleges.
Ezt a megoldást csak azért küldtem, mert feljebb a string vagy numerikus témakör is problémát okozott egyeseknek. Az awk pont jó ebben, de ezt inkább C-ben oldanám meg, mert a topicnyitó állítása szerint: "előfordulásokat most vizsgáljuk így 44 millió példán".
No, a futásidőre is láthattunk egy sikeres ellenpéldát kb. 3380 adatsor felhasználásával. ;) (Ha nem érted: lottóhúzás 1957 óta van vs. "letöltöttem a teljes magyarországi ötös lottóhízások eredményét tartalmazó CSV-t") Tudod, az ifjú titánokat - "most teszteltem le a programot pécén 1,5 M adattal" - már régen is elhajtottam: nekem 10 M adattal kellett futtatnom AIX alatt. Almát a körtével!
Ami meg a későbbiekben sem volt világos - íme egy vektorban számlálás (részlet, C):
ix=0;
for (i=0;i<Count;i++)
{
if ( adat[i] >= '0' )
{
ix<<=8;
ix+=adat[i];
}
else
{
tomb[rindex[ix]]++;
ix=0;
}
}
ahol
- Count a adat[]-ba beolvasott karakterek száma== adatfájl (unix text, mit a topicnyitóban)
- rindex a reverz index, pl.: rindex[0x0000000000003339]=39
- tomb a 91 elemű számláló vektor
Fogadjunk, hogy ez shell, awk, python stb-hez képest nagyságrendekkel gyorsabban fut! Ráadásul stringből dolgozik, amit nem kell átalakítani az indexeléshez. Az ilyen "sort" futásideje mindig a legkisebb.
A program meg olyan egyszerű, hogy nem is érdemes assemblerben megírni. ;)