Toon posts:

[awk] spaties uit een txt file halen & array sorteren

Pagina: 1
Acties:
  • 116 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Beste tweakers,

Dit is de opdracht die ik moet maken:
Schrijf een script 'letterhistogram' dat een textfile als argument neemt en
een histogram, dat de relatieve frequenties weergeeft waarin de 26 letters van
het alfabet voorkomen, afdrukt. In het script mag je naast awk ook andere
unix-commando's gebruiken.

Het histogram moet bestaan uit een balkje dat uit '*' characters bestaat. Het
balkje moet een standaard lengte hebben van 60 '*'-characters voor de meest
voorkomende letter. Andere balkjes moeten ten opzichte van deze balk geschaald
worden. De uitvoer moet alfabetisch geordend zijn. Er moet geen onderscheid
gemaakt worden tussen hoofdletters en kleine letters, dus bijv. 'a' en 'A'
worden allebei als 'a' behandeld.
Dit is gelukt, op 2 kleine dingetjes na. Allereerst wil het script de spaties niet verwijderen. Dit geeft wel het resultaat rechtstreeks op de shell:
code:
1
awk '{ gsub(/[ \t\n]+/,"",$0);print $0}' tekst.txt
(die reguliere expressie heb ik letterlijk uit de man gehaald), maar in m'n awk script heeft
code:
1
gsub(/[ \t\n]+/,"",$0)
geen resultaat..

Om de vreemde tekens eruit te halen gebruik ik
code:
1
gsub(/[^a-zA-Z]/,"",$0)
, dat werkt perfect maar daarmee haalt ie de spaties niet weg (wat toch zou moeten lijkt me).

De rest van het script is gelukt, maar dat plaats ik hier liever niet omdat er meer mensen zijn die deze opdracht moetn doen en ik niet graag van fraude beschuldigd wordt ;). Het enige probleem is dus dat ie naast de letters ook spatie+aantal keer dat deze voorkomt afdrukt. Met een if( karakter != " " ) werkt het ook niet echt.

Het tweede probleem is het sorteren van een array. Deze array bevat als index de letters a tot en met z met het aantal keer dat ze voorkomen als value. Met knoppix is deze automatisch op alfabetische volgorde gesorteerd, maar als ik inlog op de unix server van de universiteit is deze niet gesorteerd. Op die server gebruiken ze een oudere awk/nawk versie. Daarom wilde ik het voor de zekerheid toch maar coden, maar er is geen built-in functie voor..

Iemand suggesties?

[ Voor 17% gewijzigd door Verwijderd op 12-05-2003 19:29 ]


Verwijderd

Dit lijkt me niet de plek voor hulp met je huiswerk.

  • Dupje
  • Registratie: Juni 2002
  • Laatst online: 21-08 18:30
Verwijderd schreef op 12 May 2003 @ 20:05:
Dit lijkt me niet de plek voor hulp met je huiswerk.
Hier blijkt duidelijk dat de topicstarter dus wel echt er al aan gewerkt heeft, hij post niet enkel de opgave zo van 'los dit snel ff op'


Een beter GoT begint bij jezelf ;)

Verwijderd

Topicstarter
Dank je wel duponjan ;). Ik had natuurlijk ook kunnen melden dat het me hobby is, maar dan zou ik liegen...

Verwijderd

Topicstarter
code:
1
2
if ( letter != space )
print letter


Dat werkt dus wel. Maar met gsub(/space/,"",$0) werkt het weer niet...nahjah ik laat het wel zo dus. Alleen die array sorteren nog...