Discussion:
Wörter ermitteln in der bash
(zu alt für eine Antwort)
Jakobus Schuerz
2006-05-13 11:17:09 UTC
Permalink
Hi!

Ich wurde mit meinem Anliegen in diese Gruppe verwiesen, daher bitte ich
über dass doppelte Posting (d.c.o.u.l.misc wie hier) hinwegzusehen.

Ich sollte aus einer riesig-langen Liste aus einer Spalte die sämtliche
unterschiedliche Wörter herausfiltern, sie zählen und in einer Art
Histogramm ablegen, damit ich aus den häufigsten einen Stichwortkatalog
erstellen kann und die div. verschiedenen Schreibweisen der Worte (z.B.
Ans., Ansuchen, ...) vereinheitlichen kann.

Dabei ergeben sich für mich zwei Probleme:
Die Datei wurde ursprünglich mit MS-Excel 2003 erstellt. Ich hab sie mit
Open Office als csv (Kommagetrennte Listendatei) abgespeichert. Ich kann
wunderbar mit cat und cut die betreffende Spalte extrahieren. Sobald ich
aber über eine Pipe in eine Datei oder less schreibe kommt eine Anzeige
raus, wo zwischen JEDEM Zeichen der ursprünglichen Datei "^@" zu sehen ist.
Wenn ich im Konquerer über ein Plugin die ursprüngliche Datei ansehen
lasse, zeigt der das Ganz "normal" an. Kopiere ich dort den Text und
füge ihn in ein KWrite oder Kate oder Emacs-file ein, dann werden
zwischen jedem Zeichen der ursprünglichen Datei Leerzeichen eingefügt.
Versuche ich die csv-Datei mit KWrite (oder einem anderen Editor) zu
öffnen, dann bekomme ich den Warnhinweis, dass die Datei binär sei und
ein allfälliges Speichern zu einer schadhaften Datei führe...
Dieses Problem ist zwar nicht schön, aber ich hab im Ursprünglichen
Excel die Datei als .cvs exportiert, und damit ist glücklicherweise der
Binär-Schei... nicht mehr vorhanden.
Aber es geht weiter.

Ich hab die Datei mit ISO-8859-15-Zeichensatz exportiert. Die Datei wird
sowohl in einem Editor (like Kate...) als auch in VIM wunderbar mit
allen ihren Umlauten und Sonderzeichen dargestellt.
Sobald ich aber ein cat oder cut drüberlaufen lasse, werden die Umlaute
durch eine Zahlenfolge dargestellt mit der ich naturgemäß nicht viel
anfangen kann. Ich will ja die verschiedenen Wörter und Schreibweisen in
der Spalte katalogisieren und zählen.
Kann ich der bash irgendwo den zu verwendenen Zeichensatz mitteilen oder
muss ich damit leben, dass die bash-Befehle die deutschen Sonderzeichen
und Umlaute nicht kennt?

Und jetzt zum Kernproblem:
Welche Befehle kann/muss ich verwenden, damit mir eine Liste ausgegeben
wird, in der die verschiedenen Wörter, in ihren verschiedene
Schreibweisen aufgelistet werden, und in einer zweiten Spalte deren
Häufigkeit notiert ist?
So geübt bin ich im bash-programmieren noch nicht und bitte euch daher
um Hilfe.

lg jakob



Jakobus Schürz
mail: ***@onemail.at
--
Soweit im Mail personenbezogene Bezeichnungen nur in weiblicher Form
angeführt sind, beziehen sie sich auf Frauen und Mäner in gleicher
Weise. Bei Anwendung auf bestimmte Personen ist die jeweils
geschlechtsspezifische Form verwendet.
(In Anlehnung an §1 der Geschäftsordnung des Landtages für Wien vom 18.
Juli 2001)
Heiko Kuerschner
2006-05-13 12:01:46 UTC
Permalink
Post by Jakobus Schuerz
Welche Befehle kann/muss ich verwenden, damit mir eine Liste
ausgegeben wird, in der die verschiedenen Wörter, in ihren
verschiedene Schreibweisen aufgelistet werden, und in einer zweiten
Spalte deren Häufigkeit notiert ist?
~> cat wortliste.txt
bla
pli
bleu
bla
blah
pla
ähm
pla
~> sort wortliste.txt | uniq -c | sort -r
2 pla
2 bla
1 ähm
1 pli
1 bleu
1 blah
--
Kürsche
Wenns 'ner net gwittern tun tut ;)
Linux/*BSD-Anleitungen, Forum und Chat: www.newbie-net.de
Heiko Kuerschner
2006-05-13 12:06:46 UTC
Permalink
Post by Jakobus Schuerz
Welche Befehle kann/muss ich verwenden, damit mir eine Liste
ausgegeben wird, in der die verschiedenen Wörter, in ihren
verschiedene Schreibweisen aufgelistet werden, und in einer zweiten
Spalte deren Häufigkeit notiert ist?
~> cat wortliste.txt
bla
pli
bleu
bla
blah
pla
ähm
pla
~> sort wortliste.txt | uniq -c | sort -r
2 pla
2 bla
1 ähm
1 pli
1 bleu
1 blah
~> sort wortliste.txt | uniq -c | sort -k 2
2 bla
1 blah
1 bleu
2 pla
1 pli
1 ähm
--
Kürsche
Wenns 'ner net gwittern tun tut ;)
Linux/*BSD-Anleitungen, Forum und Chat: www.newbie-net.de
Jakobus Schuerz
2006-05-13 12:21:31 UTC
Permalink
Post by Heiko Kuerschner
Post by Jakobus Schuerz
Welche Befehle kann/muss ich verwenden, damit mir eine Liste
ausgegeben wird, in der die verschiedenen Wörter, in ihren
verschiedene Schreibweisen aufgelistet werden, und in einer zweiten
Spalte deren Häufigkeit notiert ist?
~> cat wortliste.txt
bla
pli
bleu
bla
blah
pla
ähm
pla
~> sort wortliste.txt | uniq -c | sort -r
2 pla
2 bla
1 ähm
1 pli
1 bleu
1 blah
~> sort wortliste.txt | uniq -c | sort -k 2
2 bla
1 blah
1 bleu
2 pla
1 pli
1 ähm
So ähnlich hab ich mir das vorgestellt. Vielen Dank.
In Meinem Fall steht aber in einer Zeile mehr als ein Wort. Wie bekomme
ich da die verschiedenen Wörter einzeln heraus um sie dann sortieren und
zählen zu können?

Ich denke ich muss jede Zeile in einzelne Wörter zerhacken, damit ich
sie zählen kann.
Kannst du mir da auch noch weiterhelfen?

lg jakob



Jakobus Schürz
mail: ***@onemail.at
--
Soweit im Mail personenbezogene Bezeichnungen nur in weiblicher Form
angeführt sind, beziehen sie sich auf Frauen und Mäner in gleicher
Weise. Bei Anwendung auf bestimmte Personen ist die jeweils
geschlechtsspezifische Form verwendet.
(In Anlehnung an §1 der Geschäftsordnung des Landtages für Wien vom 18.
Juli 2001)
Heiko Kuerschner
2006-05-13 12:28:06 UTC
Permalink
Post by Jakobus Schuerz
In Meinem Fall steht aber in einer Zeile mehr als ein Wort. Wie
bekomme ich da die verschiedenen Wörter einzeln heraus um sie dann
sortieren und zählen zu können?
Ich denke ich muss jede Zeile in einzelne Wörter zerhacken, damit ich
sie zählen kann.
Kannst du mir da auch noch weiterhelfen?
cat $datei | tr ' ' '\n' > $neuedatei
--
Kürsche
Wenns 'ner net gwittern tun tut ;)
Linux/*BSD-Anleitungen, Forum und Chat: www.newbie-net.de
Jakobus Schuerz
2006-05-13 12:36:23 UTC
Permalink
Post by Heiko Kuerschner
Post by Jakobus Schuerz
In Meinem Fall steht aber in einer Zeile mehr als ein Wort. Wie
bekomme ich da die verschiedenen Wörter einzeln heraus um sie dann
sortieren und zählen zu können?
Ich denke ich muss jede Zeile in einzelne Wörter zerhacken, damit ich
sie zählen kann.
Kannst du mir da auch noch weiterhelfen?
cat $datei | tr ' ' '\n' > $neuedatei
Das ist genau das was ich gesucht habe!
Vielen Dank!!!

lg jakob




Jakobus Schürz
mail: ***@onemail.at
--
Soweit im Mail personenbezogene Bezeichnungen nur in weiblicher Form
angeführt sind, beziehen sie sich auf Frauen und Mäner in gleicher
Weise. Bei Anwendung auf bestimmte Personen ist die jeweils
geschlechtsspezifische Form verwendet.
(In Anlehnung an §1 der Geschäftsordnung des Landtages für Wien vom 18.
Juli 2001)
Paul Hink
2006-05-13 12:29:19 UTC
Permalink
Post by Jakobus Schuerz
In Meinem Fall steht aber in einer Zeile mehr als ein Wort. Wie
bekomme ich da die verschiedenen Wörter einzeln heraus um sie dann
sortieren und zählen zu können?
Ich denke ich muss jede Zeile in einzelne Wörter zerhacken, damit ich
sie zählen kann.
Wenn die Wörter durch Leerzeichen getrennt sind:

$ tr ' ' '\n'

Ansonsten das Leerzeichen zwischen den ersten beiden einfachen
Anführungsstrichen durch das Trennzeichen ersetzen.

Paul
Alexander Skwar
2006-05-13 18:46:59 UTC
Permalink
Post by Jakobus Schuerz
So ähnlich hab ich mir das vorgestellt. Vielen Dank.
In Meinem Fall steht aber in einer Zeile mehr als ein Wort. Wie bekomme
ich da die verschiedenen Wörter einzeln heraus um sie dann sortieren und
zählen zu können?
Z.B. mit awk.
Post by Jakobus Schuerz
Ich denke ich muss jede Zeile in einzelne Wörter zerhacken, damit ich
sie zählen kann.
Ja.
Post by Jakobus Schuerz
Kannst du mir da auch noch weiterhelfen?
Darf ich auch?

datei.csv habe folgenden Inhalt:

blah;blubb;zums doings;kladeradatsch

awk -F\; '{print $2}' datei.csv | sort | uniq -c | sort -k 2

Alexander Skwar
--
Don't look back, the lemmings are gaining on you.
Jakobus Schuerz
2006-05-13 12:39:06 UTC
Permalink
Post by Jakobus Schuerz
Hi!
Ich wurde mit meinem Anliegen in diese Gruppe verwiesen, daher bitte ich
über dass doppelte Posting (d.c.o.u.l.misc wie hier) hinwegzusehen.
Ich sollte aus einer riesig-langen Liste aus einer Spalte die sämtliche
unterschiedliche Wörter herausfiltern, sie zählen und in einer Art
Histogramm ablegen, damit ich aus den häufigsten einen Stichwortkatalog
erstellen kann und die div. verschiedenen Schreibweisen der Worte (z.B.
Ans., Ansuchen, ...) vereinheitlichen kann.
Ich hab die Datei mit ISO-8859-15-Zeichensatz exportiert. Die Datei wird
sowohl in einem Editor (like Kate...) als auch in VIM wunderbar mit
allen ihren Umlauten und Sonderzeichen dargestellt.
Sobald ich aber ein cat oder cut drüberlaufen lasse, werden die Umlaute
durch eine Zahlenfolge dargestellt mit der ich naturgemäß nicht viel
anfangen kann. Ich will ja die verschiedenen Wörter und Schreibweisen in
der Spalte katalogisieren und zählen.
Kann ich der bash irgendwo den zu verwendenen Zeichensatz mitteilen oder
muss ich damit leben, dass die bash-Befehle die deutschen Sonderzeichen
und Umlaute nicht kennt?
Danke Paul, danke Heiko!
habt ihr vielleicht für dieses Problem auch noch eine Lösung? Oder bin
ich damit in der falschen Gruppe?

lg jakob


Jakobus Schürz
mail: ***@onemail.at
--
Soweit im Mail personenbezogene Bezeichnungen nur in weiblicher Form
angeführt sind, beziehen sie sich auf Frauen und Mäner in gleicher
Weise. Bei Anwendung auf bestimmte Personen ist die jeweils
geschlechtsspezifische Form verwendet.
(In Anlehnung an §1 der Geschäftsordnung des Landtages für Wien vom 18.
Juli 2001)
Jakobus Schuerz
2006-05-13 12:43:25 UTC
Permalink
Post by Jakobus Schuerz
Hi!
Ich wurde mit meinem Anliegen in diese Gruppe verwiesen, daher bitte ich
über dass doppelte Posting (d.c.o.u.l.misc wie hier) hinwegzusehen.
Ich sollte aus einer riesig-langen Liste aus einer Spalte die sämtliche
unterschiedliche Wörter herausfiltern, sie zählen und in einer Art
Histogramm ablegen, damit ich aus den häufigsten einen Stichwortkatalog
erstellen kann und die div. verschiedenen Schreibweisen der Worte (z.B.
Ans., Ansuchen, ...) vereinheitlichen kann.
[...]
Post by Jakobus Schuerz
Ich hab die Datei mit ISO-8859-15-Zeichensatz exportiert. Die Datei wird
sowohl in einem Editor (like Kate...) als auch in VIM wunderbar mit
allen ihren Umlauten und Sonderzeichen dargestellt.
Sobald ich aber ein cat oder cut drüberlaufen lasse, werden die Umlaute
durch eine Zahlenfolge dargestellt mit der ich naturgemäß nicht viel
anfangen kann. Ich will ja die verschiedenen Wörter und Schreibweisen in
der Spalte katalogisieren und zählen.
Kann ich der bash irgendwo den zu verwendenen Zeichensatz mitteilen oder
muss ich damit leben, dass die bash-Befehle die deutschen Sonderzeichen
und Umlaute nicht kennt?
Danke Heiko, danke Paul vorerst einmal!

Zur Verdeutlichung des oben beschriebenen 3 Zeilen aus dem Ergebnis der
mittlerweile Durchgeführten Zählung und Sortierung:
1 15-Erkl344rung,
1 24715-Erkl344rungen,
1 15-Pr374fungsprotokoll

Heißen sollte das Erklärung, §15-Erklärungen und Prüfungsprotokoll...
Wie geschrieben, nur nach der Anwendung von cat.
Wie krieg ich da meine Umlaute wieder rein?

lg jakob



Jakobus Schürz
mail: ***@onemail.at
--
Soweit im Mail personenbezogene Bezeichnungen nur in weiblicher Form
angeführt sind, beziehen sie sich auf Frauen und Mäner in gleicher
Weise. Bei Anwendung auf bestimmte Personen ist die jeweils
geschlechtsspezifische Form verwendet.
(In Anlehnung an §1 der Geschäftsordnung des Landtages für Wien vom 18.
Juli 2001)
Heiko Kuerschner
2006-05-13 13:07:11 UTC
Permalink
Post by Jakobus Schuerz
Zur Verdeutlichung des oben beschriebenen 3 Zeilen aus dem Ergebnis
1 15-Erkl344rung,
1 24715-Erkl344rungen,
1 15-Pr374fungsprotokoll
Heißen sollte das Erklärung, §15-Erklärungen und Prüfungsprotokoll...
Wie geschrieben, nur nach der Anwendung von cat.
Wie krieg ich da meine Umlaute wieder rein?
Evtl. hilft Dir iconv weiter.
Excel nimmt ja den Windowszeichensatz, du willst ISO-8859-15.

iconv -f WINDOWS-1252 -t ISO-8859-15 $datei -o $konvertierte_datei
--
Kürsche
Wenns 'ner net gwittern tun tut ;)
Linux/*BSD-Anleitungen, Forum und Chat: www.newbie-net.de
Alexander Wolf
2006-05-13 12:47:10 UTC
Permalink
On 2006-05-13, Jakobus Schuerz wrote:

Hallo Jakobus!

Vielleicht hilft dir der untenstehende Hack auf die Sprünge.


[...]
Post by Jakobus Schuerz
Welche Befehle kann/muss ich verwenden, damit mir eine Liste ausgegeben
wird, in der die verschiedenen Wörter, in ihren verschiedene
Schreibweisen aufgelistet werden, und in einer zweiten Spalte deren
Häufigkeit notiert ist?
v+
#!/usr/bin/gawk
#Aufruf: gawk -f verteilung.awk foobar.txt
#GNU Awk 3.1.4

{

gsub(/[.,:;!?(){}]/,"") # Interpuntion entfernen
#gegf. oben stehende Zeile löschen

for(i=1; i<=NF;i++)
anzahl[$i]++
}
END {for(w in anzahl)
print w,anzahl[w]|"sort"
}
v-

Einen schönes Wochenende wünschend
Alex
--
Es gibt zwei Arten von Freunden: Die einen sind käuflich, die anderen
sind unbezahlbar.
Heike C. Zimmerer
2006-05-13 17:48:06 UTC
Permalink
Post by Jakobus Schuerz
Die Datei wurde ursprünglich mit MS-Excel 2003 erstellt. Ich hab sie
mit Open Office als csv (Kommagetrennte Listendatei)
abgespeichert. Ich kann wunderbar mit cat und cut die betreffende
Spalte extrahieren. Sobald ich aber über eine Pipe in eine Datei oder
less schreibe kommt eine Anzeige raus, wo zwischen JEDEM Zeichen der
Das dürfte UTF-16 (oder UCS-2) sein (das ^@ ist das obere Byte(0)).
Das sieht man öfters, wenn man Windows.Dateien dumpt. Mit iconv oder
transcode kannst Du das konvertieren.

Gruß,

Heike
Ralph Angenendt
2006-05-13 18:01:00 UTC
Permalink
Post by Heike C. Zimmerer
Das sieht man öfters, wenn man Windows.Dateien dumpt. Mit iconv oder
transcode kannst Du das konvertieren.
transcode kann ja nun wirklich fast jedes Videoformat in ein anderes
kodieren, aber ich glaube, dass recode gemeint ist :)

Ralph
--
The Difference Between Me And You Is That I'm Not On Fire


Nicht schreiben können: http://lestighaniker.de/
Heike C. Zimmerer
2006-05-13 18:34:58 UTC
Permalink
Post by Ralph Angenendt
Post by Heike C. Zimmerer
transcode kannst Du das konvertieren.
transcode kann ja nun wirklich fast jedes Videoformat in ein anderes
kodieren, aber ich glaube, dass recode gemeint ist :)
Erm ... ja, stimmt.
:-)


Gru0,

Heike
Jakobus Schuerz
2006-05-14 16:40:30 UTC
Permalink
Post by Jakobus Schuerz
Ich sollte aus einer riesig-langen Liste aus einer Spalte die sämtliche
unterschiedliche Wörter herausfiltern, sie zählen und in einer Art
Histogramm ablegen, damit ich aus den häufigsten einen Stichwortkatalog
erstellen kann und die div. verschiedenen Schreibweisen der Worte (z.B.
Ans., Ansuchen, ...) vereinheitlichen kann.
So jetzt hab ich eine schöne Liste der Wörter erzeugen können.
Jetzt geht mein Anliegen weiter.

Die Aufgabe, welche ich zu lösen habe schaut folgendermaßen aus:
Ich muß in Meiner ursprünglichen Liste eine Spalte dazufügen, wo ich
Stichworte aufliste, die in dieser einen Spalte vorkommen. Dazu möchte
ich aus der oben erstellten Wortliste bestimmte Worte herausnehmen, und
eine Liste mit den relevanten Stichworten erstellen. (Das muß ich von
Hand machen, da ich bei jedem Wort entscheide, ob es relevant ist oder
nicht - der, mit, ohne,... brauche ich nicht; Bescheid, Genehmigung,...
schon)
Also ich erzeuge eine Neue Datei mit den relevanten Stichworten und
möchte dann einen Vergleich durchführen.
Ist in der betreffenden Spalte eines oder mehr der relevanten
Stichworte, so sollen diese Stichworte in die zusätzliche Spalte
eingetragen werden.
Wie kann ich das machen?



lg jakob

Jakobus Schürz
mail: ***@onemail.at
--
Soweit im Mail personenbezogene Bezeichnungen nur in weiblicher Form
angeführt sind, beziehen sie sich auf Frauen und Mäner in gleicher
Weise. Bei Anwendung auf bestimmte Personen ist die jeweils
geschlechtsspezifische Form verwendet.
(In Anlehnung an §1 der Geschäftsordnung des Landtages für Wien vom 18.
Juli 2001)
Loading...