2016-04-25 14 views
1

Seit einiger Zeit versuche ich ein Bash-Skript zu schreiben, das eine * .txt-Datei lesen und das Wort ausgeben soll. Bis jetzt hatte ich kein Glück. Ich kenne den Algorithmus, das einzige Problem ist die Syntax.Bash Shell Skript für Word-Zählung

Wie sollte dieses Skript funktionieren?

Wenn ich tippe ./myScript.sh myTextFile.txt in einem Terminal, es ausgeben soll alle Wortvorkommen in einer sortierten Reihenfolge vom größten zum kleinsten in Prozent wie folgt aus:

17 is 7.1% 
12 all 6.4% 
10 house 5.5% 
5 tree 3.7% 

........... ......... und so weiter.

Wenn ich einen Schalter setzen ./myScript.sh -x 3 myTextFile.txt sollte es nur die Wörter länger als 3 Zeichen ausgeben.

Wenn ich einen Schalter setzen ./myScript.sh -y 4 myTextFile.txt sollte es nur die Wörter ausgeben, die 4 mal oder mehr auftreten. Hier hatte ich viele Probleme damit herauszufinden, welche Switches benutzt wurden und welchen Wert sie haben.

Und natürlich, wenn ich eine Datei, die nicht existiert, oder einen falschen Schalter, sollte das Skript einen Fehler werfen.

Vielen Dank für Ihre Hilfe.

+0

Beginnen Sie besser Ihre Versuche zu zeigen und was Sie vermissen, damit wir versuchen können, Ihnen zu helfen – fedorqui

+0

Können Sie Ihr Skript zeigen, damit wir Ihnen helfen können? – Auzias

Antwort

1

können Sie awk verwenden, um die Wortzahl zu bekommen:

awk '{for(i=1;i<=NF;i++){a[$i]++;tot++}}END{for(j in a) {printf("%s %s %2.1f%\n",a[j],j,a[j]/tot*100)}}' myTextFile.txt | sort -g 

Dieser awk Befehl füllt das Array a[] mit allen Wörtern und deren Indexzählwert.

tot ist die Gesamtzahl der gefundenen Wörter.

Die Anweisung END durchläuft das Array und zeigt die Anzahl, das Wort und den Prozentsatz an.

sort -g führt eine numerische Sortierung basierend auf der Zählnummer durch.