PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : bestimmte Wörter in Datei zählen



Bartleby
28.01.04, 10:26
Hallo!

Ich möchte in einem Text-File nach bestimmten Wörtern suchen und anschließend die Anzahl der Wörter ausgeben.
Ich denke mal es müßte eine Kombi aus wc und grep sein (via pipe), oder? Grep sucht nach dem Wort, gibt mir aber die ganze Zeile aus, in der das Wort gefunden wird. Wenn es mir nur z.B. WORT WORT WORT ausgeben würde, könnte ich es ja dann mit wc zählen lassen.

Hat jemand eine Idee dazu?


Danke

bartleby

taylor
28.01.04, 10:39
Die Manpage von grep zeigt mir einen Parameter -c. Tut das nicht?

Der Gestreifte
28.01.04, 11:21
Ich hatte das mal mit meinen rudimetären perl-Kenntissen gemacht:

#!/usr/bin/perl -w

# nach welchem Ausdruck suchen wir?
$MUSTER = "";

$COUNT = 0; #eh klar, der zaehler

print 'Welcher String? ';
chomp($MUSTER = <STDIN>);
while (<>) {
while (/$MUSTER/g) {
$COUNT++;
}
}

print "'$MUSTER' $COUNT mal gefunden.\n"; Ausführbar machen und mit "perlskript.pl textdatei.txt" aufrufen.


Die Manpage von grep zeigt mir einen Parameter -c. Tut das nicht? Im Grunde schon. Wenn der String in einer Zeile jedoch zwei mal vorkommt, wird dennoch nur eine Zeile gezählt.

Bartleby
28.01.04, 11:31
Im Grunde schon. Wenn der String in einer Zeile jedoch zwei mal vorkommt, wird dennoch nur eine Zeile gezählt.

Den Schalter hatte ich auch schon entdeckt, aber genau das ist das Problem!


Das Perl-Script macht genau das was ich suche, aber es muß doch auch ohne perl gehen, oder? Ich brauche es für eine Belegarbeit und ich glaub der Prof. will kein Perl sehen...

GrafKoks
28.01.04, 11:40
Dann nimm doch eine x-beliebige andere Programmiersprache, wenn der Prof. einfach nur was gegen Perl hat...

Der Gestreifte
28.01.04, 12:09
Will er möglicherweise "awk" sehen?

Bartleby
28.01.04, 12:17
Dann nimm doch eine x-beliebige andere Programmiersprache, wenn der Prof. einfach nur was gegen Perl hat...

Ich glaube nicht, dass er direkt was gegen Perl hat, ich bin nur grad in einem Aufgabenblock, wo es um Pipes, wc, grep u.ä. geht. Deswegen muß es auch damit gehen.

geist_der_foren
28.01.04, 13:46
Gibt es schon eine lösung ??? Würde mich auch mal interessiren :D

Shadowblade
28.01.04, 13:53
cat test | grep new | tr [:space:] \\n | grep new | wc -l

sieht zwar hässlich aus, funktioniert aber soweit.
es werden aber auch substrings gezählt. mit 'grep ^new$' im 2. grep ist das nicht mehr der fall.

Windoofsklicker
28.01.04, 15:35
# cat datei | grep wort | wc -l

gibt aus, wie oft das wort in der datei gefunden wurde, oder nicht?

formtapez
28.01.04, 16:27
nur wenn alle wörter einzeln untereinanderstehen würde das gehen.

Jasper
28.01.04, 17:18
tr '[:space:]' '\n' < datei | grep -c <wort>

tr ersetzt alle <space> durch LF, dadurch entsteht eine liste mit einem wort pro zeile die dann mittels grep durchsucht werden kann.

ich seh grade, shadowblade hat das mit tr bereits gepostet.

-j

drcux
28.01.04, 17:30
warum so kompliziert...;)

grep -o suchwort test.txt | wc -w

grep -o zeigt nur die gefunden Wörter, auch mehrere in einer Zeile
wc -w zählt diese dann

drcux
28.01.04, 17:37
grep -r -o fuc....k /usr/share/doc/* | wc -w


39 Treffer, tztztztztz:D

Der Gestreifte
28.01.04, 17:48
grep -r -o fuc....k /usr/share/doc/* | wc -w


39 Treffer, tztztztztz Du hast es gut...



addin@captin:maddin$ rgrep -o fuc....k /usr/share/doc/* | wc -w
grep: Ungültige Option -- »o«
Aufruf: grep [OPTION]... MUSTER [DATEI]...
»grep --help« gibt Ihnen mehr Informationen.
0
maddin@captin:maddin$ grep --version
grep (GNU grep) 2.4.2

Copyright 1988, 1992-1999, 2000 Free Software Foundation, Inc. Oder hast Du XXX-Versionen unter /usr/share/doc liegen? ;o)

kshade
28.01.04, 17:58
cat datei | grep -oc wort

Geht zumindest bei einem Wort pro Suchdurchlauf :)

Bartleby
28.01.04, 19:37
grep -o suchwort test.txt | wc -w

Das ist genau das, was ich gesucht habe. Warum bin ich da eigentlich nicht selber drauf gekommen :confused:
Sei's draum, VIELEN DANK an alle!