Jó lenne egy olyan lista, hogy egy adott karakterből (vagy mintából) egy fájl soraiban mennyi van.
Tehát mondjuk olyan sor, amiben 1 db van: 20, olyan sor, amiben két darab van: 9, olyan sor, amiben 3 db van: 42...
mondjuk fogalmam sincs, egy ilyesmit hogy lehetne hatékonyan leírni. Máshonnan indult a dolog, csak tovább gondoltam egy problémát.
Kellett pl. hány sor van, amiben 76 tabulátor van. Erre írtam ezt:
egrep "(.* ){76}" Detail~.txt | wc -l
Szóval ez jó, de most azon kívül más nem jut eszembe, hogy pl. egy ciklussal végigmegyek 1-100 ig, és kiíratom melyik számúból mennyi van. Ráadásul ugye ahol 75-öt találok, az megszámolja azokat is, ahol 76 is megvan.
Esetleg egy ciklussal végigmenni fentről, és a fájlból kitörölni amit egyszer már megszámoltam...
De akkor honnan indulnék? Jobb lenne lentről indulni, amiben legalább egy van, az menjen egy temp fájlba.
Második futásra már ezt nézi, amiben legalább kettő van, menjen egy második fájlba... stb, amíg üres fájl nem lesz a vége
No, gondolom, ennél bizonyára van szebb megoldás is.
- 1143 megtekintés
Hozzászólások
Valami ilyesmi?
$ cat a.txt
aab
aaa
ba
$ cat a.txt | while read line; do echo $line | grep -o a | wc -l; done;
2
3
0
1
- A hozzászóláshoz be kell jelentkezni
Ez indulásnak nem rossz, már csak összegezni kellene, hogy pl.
0: 1
1: 1
2: 1
3: 1
aab
aaa
b
ba
baa
esetén meg 0:1, 1:1, 2:2, 3:1
- A hozzászóláshoz be kell jelentkezni
|uniq -c
(kell ele sort is)
szerk:
cat a.txt | while read line; do echo $line | grep -o a | wc -l; done |sort -n|uniq -c
--
The iPad: Because the iPhone was too small for other people to notice you.
- A hozzászóláshoz be kell jelentkezni
Akkor nem volt világos teljesen a feladat :)
A kimenetre még ráereszted ezt: "sort | uniq -c".
A sort csak azért kell, hogy sorrendben legyen. Igaz ekkor elöl lesz, hogy mennyi, és utána, hogy mi.
- A hozzászóláshoz be kell jelentkezni
Jó lenne egy olyan lista, hogy egy adott karakterből (vagy mintából) egy fájl soraiban mennyi van.
Tehát mondjuk olyan sor, amiben 1 db van: 20, olyan sor, amiben két darab van: 9, olyan sor, amiben 3 db van: 42...
Ezt hogy lehetne világosabban leírni?
Egyébként a sort meg számolós dolog az jó.
- A hozzászóláshoz be kell jelentkezni
Nem azt írtam, hogy "nem világosan fogalmaztad meg"... nekem sikerült átsiklani felette...
- A hozzászóláshoz be kell jelentkezni
Hát azt nem tudom, hogy hatékony-e (valszeg nem), de az awk gsub funkcióját fel lehetne erre a feladatra használni:
$ printf '%s\n' alma korte szilva ananasz narancs | awk '{ print gsub( /a/, "", $0 );}'
2
0
1
3
2
$
Fenti példa minden sorban az "a" előfordulását számolja meg, de nyilván nem lenne túl bonyolult kb tetszőleges minta előfordulását megszámolni, vagy akár az aktuális sor tartalmát is kiíratni a szám után. Meg persze ha valakinek az awk nem túl ismerős, vagy jobban bízik benne, hasonlót a perl is tud, ez kb ugyanaz (csak a vége) :
... | perl -lpe '$_= s/a//g;'
(Mondjuk nem tudom miért, de nem 0-t, hanem üres sztringet ad vissza, ha nincs mit cserélnie.)
- A hozzászóláshoz be kell jelentkezni