automatisch wörter zählen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Colttt
Beiträge: 3012
Registriert: 16.10.2008 23:25:34
Wohnort: Brandenburg
Kontaktdaten:

automatisch wörter zählen

Beitrag von Colttt » 28.02.2013 12:43:43

Hallo,

ich habe beispielsweise solch eine Datei: NoPaste-Eintrag37023
dort möchte ich gern das er automatisch die Kürzel/Wörter erfasst und diese dann zählt, zum Schluss sollte dan soetwas wie:
FER: 53
PSAG:10
TSH:5
etc
rauskommen

ideal wäre etwas mit eine shellscript..

(btw soll auf einem solaris laufen das Script)
Debian-Nutzer :D

ZABBIX Certified Specialist

Benutzeravatar
Natureshadow
Beiträge: 2157
Registriert: 11.08.2007 22:45:28
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Radevormwald
Kontaktdaten:

Re: AW: automatisch wörter zählen

Beitrag von Natureshadow » 28.02.2013 13:03:38

Code: Alles auswählen

tr ';' '\n' foo.txt | sort | uniq -c

Colttt
Beiträge: 3012
Registriert: 16.10.2008 23:25:34
Wohnort: Brandenburg
Kontaktdaten:

Re: automatisch wörter zählen

Beitrag von Colttt » 28.02.2013 13:05:18

das scheint leider unter solaris nicht zu gehen:

Code: Alles auswählen

Usage: tr [ -cds ] [ String1 [ String2 ] ]
Debian-Nutzer :D

ZABBIX Certified Specialist

uname
Beiträge: 12406
Registriert: 03.06.2008 09:33:02

Re: automatisch wörter zählen

Beitrag von uname » 28.02.2013 13:10:51

Vielleicht so:

Code: Alles auswählen

awk -F";" '{for (i=1;i<=NF;i++){anz[$i]++} } ; END {for (x in anz){print x ": " anz[x]} }' test.txt      

Colttt
Beiträge: 3012
Registriert: 16.10.2008 23:25:34
Wohnort: Brandenburg
Kontaktdaten:

Re: automatisch wörter zählen

Beitrag von Colttt » 28.02.2013 13:18:37

geil es geht..
:hail: :hail: :hail: :hail: :hail: :hail:


das kommt dabei raus:

Code: Alles auswählen

TYAKW: 105
IGEW: 47
: 5136
CEA: 439
FT3: 494
19-9: 183
FOLS: 99
DIG: 14
CEN1: 8194
AFP: 39
B12: 186
CARBW: 14
PHNY: 4
CICLW: 15
AHBST: 50
AHBC: 157
HBS: 155
FER: 560
TSHS: 3
AHAVT: 41
DIT: 7
PCALW: 87
BHCG: 53
HIV: 102
CKMB: 197
TNI: 379
T4: 643
AHBS: 90
HAVMW: 24
AHAV: 55
TSH: 2945
AHCV: 193
THEOW: 3
VALPW: 28
ATPOW: 152
CPEP: 18
12-5: 24
15-3: 200
FPSA: 43
PSAG: 346
was heisst : 5136 ??
und kann man es evtl so bei 20 zeilen umbrechen das er dann daneben schreiben??

Code: Alles auswählen

PHNY: 4        CICLW: 15
AHBST: 50         AHBC: 157
HBS: 155          FER: 560
Debian-Nutzer :D

ZABBIX Certified Specialist

uname
Beiträge: 12406
Registriert: 03.06.2008 09:33:02

Re: automatisch wörter zählen

Beitrag von uname » 28.02.2013 13:39:01

was heisst : 5136 ??
Ist wohl die Anzahl Einträge, die leer sind. Müsstest du vielleicht noch abfangen. Falls du immer am Ende der Zeile ein Semikolon hast reicht es im übrigen die erste for-Schleife auf "i<NF" (echt kleiner) zu setzen. Sollte dem jedoch nicht der Fall sein wäre diese Änderung fehleranfällig bzw. falsch.
und kann man es evtl so bei 20 zeilen umbrechen das er dann daneben schreiben??
Einfacher wäre es nach immer zwei Ausgaben einen Umbruch zu machen. Hierzu bietet sich die Modulo-Funktion (%) an. Natürlich kann man auch 3, 4 oder eine beliebige Anzahl von Ausgaben in eine Zeile schreiben. Das letzte "print" ist dafür da, dass noch einmal ein Newline folgt.

Code: Alles auswählen

awk -F";" '{for (i=1;i<=NF;i++){anz[$i]++} } ; END {for (x in anz){j++; printf x ": " anz[x] " "; if (j%2 == 0) printf"\n"} print}' test.txt 
Kann man bestimmt besser programmieren. Eigentlich kenne ich mich mit awk gar nicht aus.
Zuletzt geändert von uname am 28.02.2013 13:44:56, insgesamt 1-mal geändert.

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: automatisch wörter zählen

Beitrag von Cae » 28.02.2013 13:44:30

Code: Alles auswählen

$ awk 'BEGIN { RS = ";|\n"; } { if ("" != $1) d[$1]++; } END { for (data in d) { printf "%3d\t%s\n", d[data], data;}; }' data | sort -n
... wobei man auch die Auszaehlerei durch uniq machen lassen kann (welches sortierte Daten braucht, deswegen zweimal sort):

Code: Alles auswählen

$ awk 'BEGIN { RS = ";|\n"; } { if ("" != $1) print $1; }' data | sort | uniq -c | sort -n
Das Prinzip ist jeweils, dass man Newline und ; als Worttrenner definiert und anschliessend die Woerter zaehlt.

Gruss Cae

--Edit: Vorhin im Chat hatte Colttt einen anderen Pastebin (pastebin.com) angegeben, der wohl die Zeileenden kaputt macht und sie standardmaessig als \r\n ausliefert. Das gibt dann 'ne extra Zaehlzeile fuer \r. Wenn man das nicht will, kann man RS = ";|\n|\r"; verwenden.
Zuletzt geändert von Cae am 28.02.2013 13:56:02, insgesamt 1-mal geändert.
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

uname
Beiträge: 12406
Registriert: 03.06.2008 09:33:02

Re: automatisch wörter zählen

Beitrag von uname » 28.02.2013 13:49:09

Das mit den beiden Trennern ist nicht schlecht.

Code: Alles auswählen

awk 'BEGIN {RS=";|\n";} {for (i=1;i<=NF;i++){anz[$i]++} } ; END {for (x in anz){j++; printf x ": " anz[x] " "; if (j%2 == 0) printf"\n"}print }' test.txt 
Somit sollte das Programm keine Statistiken für leere Felder (Ende Zeile) mehr ausgeben und funktioniert sowohl mit als auch ohne abschließendem Semikolon pro Zeile. Der Wert hinter dem Prozent (%) gibt die Anzahl der Spalten pro Zeile an.

Benutzeravatar
Natureshadow
Beiträge: 2157
Registriert: 11.08.2007 22:45:28
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Radevormwald
Kontaktdaten:

Re: AW: automatisch wörter zählen

Beitrag von Natureshadow » 28.02.2013 13:52:27

awk ist doch völlig überflüssig.

cat foo.txt | tr ...

Außerdem ist das hier ein Debian-Forum, Solaris kann keine Anforderung sein.

Benutzeravatar
CH777
Beiträge: 1466
Registriert: 27.05.2008 16:37:17

Re: automatisch wörter zählen

Beitrag von CH777 » 28.02.2013 15:38:03

Natureshadow hat geschrieben:awk ist doch völlig überflüssig.
Dein beitrag hier ist völlig überflüssig, da es offensichtlich schon Leute gab, die gerne geholfen haben.

Benutzeravatar
Natureshadow
Beiträge: 2157
Registriert: 11.08.2007 22:45:28
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Radevormwald
Kontaktdaten:

Re: AW: automatisch wörter zählen

Beitrag von Natureshadow » 28.02.2013 16:03:46

CH777 hat geschrieben:
Natureshadow hat geschrieben:awk ist doch völlig überflüssig.
Dein beitrag hier ist völlig überflüssig, da es offensichtlich schon Leute gab, die gerne geholfen haben.
Nachdem er die Lösung schon in dreifacher Ausfertigung im Chat bekommen hatte, ja.

Außerdem darf man durchaus mehrere Lösungen haben.

Hattest du noch was inhaltliches zu sagen oder wolltest du nur trollen?

Benutzeravatar
Meillo
Moderator
Beiträge: 9239
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: automatisch wörter zählen

Beitrag von Meillo » 28.02.2013 16:04:22

CH777 hat geschrieben:
Natureshadow hat geschrieben:awk ist doch völlig überflüssig.
Dein beitrag hier ist völlig überflüssig, da es offensichtlich schon Leute gab, die gerne geholfen haben.
Das sehe ich nicht so. Die Pipeline von Natureshadow ist einfach und gut, gescheitert ist der Vorschlag nur daran, dass tr(1) (aus historischen Gruenden leider) keine Dateiargumente akzeptiert sondern nur von stdin liest. Das vergisst man schnell mal weil das eine Abweichung vom ueblichen Schema ist. Leider hat niemand realisiert, dass man einfach nur ein `<' vor den Dateinamen setzen muss um die Pipeline von Natureshadow ans Laufen zu kriegen. (Oder halt mit cat(1) wenn man diese Katze verschwenden will.) Darum ist der Kommentar von Natureshadow keineswegs ueberfluessig sondern, im Gegenteil, sehr notwendig.


EDIT: Was ist ``der Chat''? ... Ist das eine Parallelwelt zum Forum?
Use ed once in a while!

Benutzeravatar
Natureshadow
Beiträge: 2157
Registriert: 11.08.2007 22:45:28
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Radevormwald
Kontaktdaten:

Re: AW: automatisch wörter zählen

Beitrag von Natureshadow » 28.02.2013 16:08:50

Meillo hat geschrieben: EDIT: Was ist ``der Chat''? ... Ist das eine Parallelwelt zum Forum?
Guckst du links im Menü...

Benutzeravatar
Meillo
Moderator
Beiträge: 9239
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: automatisch wörter zählen

Beitrag von Meillo » 28.02.2013 16:10:11

Colttt hat geschrieben: und kann man es evtl so bei 20 zeilen umbrechen das er dann daneben schreiben??
Mehrere Spalten kann man mit pr(1) machen. Um die Ergebnisse in drei Spalten aufzuteilen: `... | pr -t -3'.
Use ed once in a while!

uname
Beiträge: 12406
Registriert: 03.06.2008 09:33:02

Re: automatisch wörter zählen

Beitrag von uname » 28.02.2013 16:14:46

Mehrere Spalten kann man mit pr(1) machen. Um die Ergebnisse in drei Spalten aufzuteilen: `... | pr -t -3'.
Cool. Wieder was gelernt. Danke.

Antworten