Bash: Wortstatistik erstellen
Gegeben ist eine Textdatei, die zB so aussieht a b a b c c c d e f d e f Wie erstelle ich eine Datei, die idente Zeilen zählt, also: a b: 2 c: 3 d e f: 3 Wie zähle ich die enthaltenen Leerzeichen in der Datei? Alternativ: Gegeben sind mehrere Dateien: Datei1: a b: 2 c: 3 d e f: 3 Datei2: a b: 3 c: 5 Wie wird daraus: a b: 5 c: 8 d e f: 3 Al -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am 24.04.07 schrieb Al Bogner <suse-linux@ml061.pinguin.uni.cc>:
Gegeben ist eine Textdatei, die zB so aussieht a b a b c c c d e f d e f
Wie erstelle ich eine Datei, die idente Zeilen zählt, also:
a b: 2 c: 3 d e f: 3
sort|uniq -c Gruß Martin -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Al Bogner schrieb am 24.04.2007 11:40:
Gegeben ist eine Textdatei, die zB so aussieht
a b a b c c c d e f d e f
Wie erstelle ich eine Datei, die idente Zeilen zählt, also:
a b: 2 c: 3 d e f: 3
uniq -c vers.txt | sed 's|\(\W*\)\([[:digit:]*]\) \(.*\)|\3: \2|g' a b: 2 c: 3 d e f: 2
Wie zähle ich die enthaltenen Leerzeichen in der Datei?
#!/bin/bash MIT=$( wc -c < vers.txt ) OHNE=$( tr -d ' ' < vers.txt | wc -c ) DIFF=$[$MIT-$OHNE] echo "Mit LZ: $MIT, ohne LZ: $OHNE, Differenz: $DIFF"
Alternativ:
Gegeben sind mehrere Dateien:
Datei1: a b: 2 c: 3 d e f: 3
Datei2: a b: 3 c: 5
Wie wird daraus: a b: 5 c: 8 d e f: 3
Al
Ich fürchte, AWK ist Dein Freund ;-) HTH Werner - -- Werner Flamme, Abt. WKDV Helmholtz-Zentrum für Umweltforschung GmbH - UFZ Permoserstr. 15 - 04318 Leipzig Tel.: (0341) 235-3921 - Fax (0341) 235-453921 http://www.ufz.de - eMail: werner.flamme@ufz.de -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.5 (GNU/Linux) Comment: Using GnuPG with SUSE - http://enigmail.mozdev.org iD8DBQFGLdvfk33Krq8b42MRAtLtAJ4hY5MQouqvpuLccIKpfNUDrMekSQCePvV4 T70Yva9/KzzqGf8bUFRoIxE= =tHYc -----END PGP SIGNATURE----- -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, Al Bogner schrieb (24.4.2007):
Gegeben ist eine Textdatei, die zB so aussieht
a b a b c c c d e f d e f
Wie erstelle ich eine Datei, die idente Zeilen zählt, also:
a b: 2 c: 3 d e f: 3
sort <FILE> | uniq -c | sed 's/^ *\([1-9].\)/\1/' | sed 's/\(^[1-9]*\) \(.*\)/\2: \1/' Bei den weiteren Fällen muss ich noch ein wenig nachdenken...;-) Gruß Kimmo -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, Al Bogner schrieb (24.4.2007):
Gegeben ist eine Textdatei, die zB so aussieht
a b a b c c c d e f d e f
Wie erstelle ich eine Datei, die idente Zeilen zählt, also:
a b: 2 c: 3 d e f: 3
sort <FILE> | uniq -c | sed 's/^ *\([0-9].\)/\1/' | sed 's/\(^[0-9]*\) \(.*\)/\2: \1/' Sorry, statt [1-9] muss man natürlich [0-9] haben. Gruß Kimmo -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am Dienstag, 24. April 2007 12:32 schrieb K. Elo:
sort <FILE> | uniq -c | sed 's/^ *\([0-9].\)/\1/' | sed 's/\(^[0-9]*\) \(.*\)/\2: \1/'
Sorry, statt [1-9] muss man natürlich [0-9] haben.
Vielen Dank, die Form ist nicht so genau, diese Darstellung gefällt mir noch besser, ... | uniq -c | sort -nr Bleibt also die Frage, wie ich bei zusammengefasster Darstellung weiter zusammenfasse, also zB Datei1: 2 a b 3 c 3 d e f Datei2: 3 a b 5 c Irgendwie sollte man also die ursprünglichen Dateien wieder erstellen, oder? Vielleicht kann man mit sed etwas machen? Im schlimmsten Fall lösche ich die ursprünglichen Dateien nicht, aber vielleicht gibt es eine nicht zu aufwendige Lösung, wenn nur mehr die Zusammenfassung vorhanden ist. Al -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hi Al, Am Dienstag, 24. April 2007 schrieb Al Bogner:
Am Dienstag, 24. April 2007 12:32 schrieb K. Elo: die Form ist nicht so genau, diese Darstellung gefällt mir noch besser,
... | uniq -c | sort -nr
Bleibt also die Frage, wie ich bei zusammengefasster Darstellung weiter zusammenfasse, also zB
Datei1: 2 a b 3 c 3 d e f
Datei2: 3 a b 5 c
du pipest einfach den ganzen datensalat in einen stream cat datei1 datei2 datei3 | unic -c | sort -nr wenn du ein Gesamtergebnis haben willst. Gruss Falk -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am Dienstag, 24. April 2007 16:21 schrieb Falk Sauer: Hallo Falk,
Am Dienstag, 24. April 2007 schrieb Al Bogner:
Am Dienstag, 24. April 2007 12:32 schrieb K. Elo: die Form ist nicht so genau, diese Darstellung gefällt mir noch besser,
... | uniq -c | sort -nr
Bleibt also die Frage, wie ich bei zusammengefasster Darstellung weiter zusammenfasse, also zB
Datei1: 2 a b 3 c 3 d e f
Datei2: 3 a b 5 c
du pipest einfach den ganzen datensalat in einen stream
cat datei1 datei2 datei3 | unic -c | sort -nr
wenn du ein Gesamtergebnis haben willst.
Das funktioniert aber nicht, es soll ja die 1. Spalte addiert werden. Als provisiorische Lösung habe ich zur Zeit: find /... -type f -name "keywords.txt" | xargs cat | sort | uniq -c | sort -nr wobei keywords.txt die nicht zusammengefasste Ausgangsdatei ist. Das ist schon ganz brauchbar, allerdings würde ich gerne die Sortierung der Keywords, also die 2. Spalte steigend und die Quantität (1. Spalte) fallend haben. Das 1. sort ist wahrscheinlich redundant, bin mir aber nicht sicher, da schon alles sortiert vorliegt. Al -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hi Al Am Dienstag, 24. April 2007 schrieb Al Bogner:
Am Dienstag, 24. April 2007 16:21 schrieb Falk Sauer:
Hallo Falk,
Am Dienstag, 24. April 2007 schrieb Al Bogner:
Am Dienstag, 24. April 2007 12:32 schrieb K. Elo: die Form ist nicht so genau, diese Darstellung gefällt mir noch besser,
... | uniq -c | sort -nr
Bleibt also die Frage, wie ich bei zusammengefasster Darstellung weiter zusammenfasse, also zB
Datei1: 2 a b 3 c 3 d e f
Datei2: 3 a b 5 c
du pipest einfach den ganzen datensalat in einen stream
cat datei1 datei2 datei3 | unic -c | sort -nr
wenn du ein Gesamtergebnis haben willst.
Das funktioniert aber nicht, es soll ja die 1. Spalte addiert werden.
Als provisiorische Lösung habe ich zur Zeit:
find /... -type f -name "keywords.txt" | xargs cat | sort | uniq -c | sort -nr
wobei keywords.txt die nicht zusammengefasste Ausgangsdatei ist.
Das ist schon ganz brauchbar, allerdings würde ich gerne die Sortierung der Keywords, also die 2. Spalte steigend und die Quantität (1. Spalte) fallend haben. Das 1. sort ist wahrscheinlich redundant, bin mir aber nicht sicher, da schon alles sortiert vorliegt.
Das erste sort ist nicht redundant weil afair uniq nur auf sortierem input richtig geht, mein Fehler. Gruss Falk -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, On Tuesday 24 April 2007 11:40:34 Al Bogner wrote:
Gegeben ist eine Textdatei, die zB so aussieht
a b a b c c c d e f d e f
Wie erstelle ich eine Datei, die idente Zeilen zählt, also:
a b: 2 c: 3 d e f: 3
Nur mal so ein Ansatz (und ohne Gewaehr): sort <datei> | uniq -c welcher es noch noetig macht etwas herumzuformatieren.
Wie zähle ich die enthaltenen Leerzeichen in der Datei?
tr -d -c ' ' <datei> | wc -c Roman -- Roman Fietze Telemotive AG Büro Mühlhausen
participants (6)
-
Al Bogner
-
Falk Sauer
-
K. Elo
-
Martin Schröder
-
Roman Fietze
-
Werner Flamme