Olis tekstitiedostossa läjä numeroita tyyliin:
4 56 8 102
78 1 11
6
90 150 111 45
jne pari sataa riviä...
Onko olemassa jokin näppärä komentorivikäsky, jolla voisi katsoa miten monta kertaa vaikkapa numero 5 esiintyy tässä koko listassa?
4 56 8 102
78 1 11
6
90 150 111 45
jne pari sataa riviä...
Onko olemassa jokin näppärä komentorivikäsky, jolla voisi katsoa miten monta kertaa vaikkapa numero 5 esiintyy tässä koko listassa?
Vastaukset 11
Vanhimmat
Osoittaa toki älykkyyttä kysellä palstoilla, miten kotiläksysi saisit vaivattomimmin tehdyksi.
Luulen, että kaipaat komentoa wc.
python -c 'l=[j.strip() for i in open("/etc/fstab").readlines() for j in i.split(" ") if j]; print l.count(mitä_haet)'
hehe
python -c 'print [i.strip() for i in open("/etc/fstab").read().split() if i].count(jotain)'
vähä lyhyempi
Python on ohjelmointikieli. Vastaavanhan olisi voinut tehdä monella muullakin ohjelmointikielellä.
Alkuperäinen kysymys liittyi paremminkin shelliin tai jakelusta löytyviin ohjelmiin.
shell scriptaaminen ja regex
cat lista |grep -oe "5." |grep -ve "5[0-9]$"
jossa tuo jälkimmäinen grep poistaa esim:
51, 555 ,5403
ai niin niiden määrä piti laskea. eli näin:
cat lista |grep -oe "5." |grep -ve "5[0-9]$" |wc -w
ja tuo "lista" on siis se tiedosto jossa ne numerot on..
rivillä on moneen kertaan haettu numero?
oma lista:
4 56 8 102
78 1 11
6 5 5955
90 150 111 45
5 10 20 11 22 5
40
123 5 332 15 51 555
niin kun muutin hakuehdoksi "1" niin se löysikin noita 11 ja 111-lukuja..
pitää vielä fiksata ennen kuin toimii..
grep -ow "5" lista |wc -w
ja lista oli:
---
4 56 8 102
78 1 11
6 5 5955
90 150 111 45
5 10 20 1
1 22 5
40
123 5 332 15 51 555
123 222 12
3
55
---
niin nyt se laskee listasta jonkin ylimääräisen vitosen..
kaikilla muilla luvuilla näytti toimivan.
no ehkä vain en osaa..
Grepillä yritin tuota myös aluksi ratkoa, mutta en keksinyt siihen toimivia parametrejä. Pulma ratkesi (jos nyt jotain sattuu kiinnostamaan...) kopioimalla lukusarjat OpenOfficen Calciin ja loihtimalla johonkin soluun loitsu
=COUNTIF(A$1:A$544;$H2)
Tämä siis laskee sarakkeesta A riveiltä 1-544, että miten monella rivillä sijaitsee soluun H2 syötetty luku. Lukusarjoissani kun oli maksimissaan 6 lukua per rivi, niin tuo sama kaava sitten kopioidaan vielä viiteen seuraavaan soluun ja rimpsun loppuun kaava, joka summaa nämä yhteen.
Toimii näinkin, mutta hieman vaivalloinen verrattuna siihen, jos koko roskan olisi saanut suoraan komentoriviltä yhdellä käskyllä.