Shell-Script zum Zählen der Vorkommen eines Wortes in einer Datei
Nehmen wir die unterhalb des Inhalts als Beispiel
This file is a test file
this file is used to count the word 'file' in this test file
there are multiple occurrences of word file in some lines in this test file
Ich zählen will das Wort 'Datei' in der oben genannten Inhalte.
Bin ich unter den unten angegebenen shell-Befehl
cat $filename | sed "s/_/new/g" | sed "s/$word/_/g" | tr -c -d _ |wc -c
Ist das ok oder besser Ideen ..?
InformationsquelleAutor Manikanda raj S | 2012-08-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Tr für die Trennung von Worten und dann grep und wc möglich scheint :
InformationsquelleAutor Nibbler
Den
-c
option gibt an, zu berichten, eine Anzahl.Den
-o
option gibt an, zu zählen, jedes auftreten, nicht nur die Anzahl der passenden Zeilen.Den
-w
option gibt an, zu zählen, Wort entspricht, d.h. keine partiellen übereinstimmungen wie "Dateien" oder "profile".Leider einige Versionen von
grep
funktionieren nicht richtig, wenn Sie kombinieren-c
und-o
. Wenn Sie, dass Fehler, @Nykakin Antwort ist ein guter workaround.Achten Sie auf die korrekte quoting von Variablen interpoliert, auch.
Aktualisiert; vergessen die
-o
option, das ganze Rind -/ -: Danke für den Hinweis.InformationsquelleAutor tripleee
InformationsquelleAutor Nykakin
Ich würde empfehlen, die einfachste Methode, hier wird:
Ich möchten Sie Sie strikt nach diesem Wort und keine Präfix-und suffix-dann ändern Sie es wie folgt:
InformationsquelleAutor Preeti Maurya
InformationsquelleAutor locojay
Könnte man es machen, alles in
awk
oderperl
und können Sie auf jeden Fall entfernen Sie diecat
(sed arbeiten können Dateinamen auch).grep
selbst ist ein no-go, denn es wird nur eins zählen, Spiel pro Linie.Versuchen Sie einen anderen funky Ansatz, um grep nützlich:
Ich eine neue Zeile zu beginnen, bevor jeder Charakter, der gleiche wie der erste Charakter mit dem Suchbegriff. So nur ein Spiel pro Zeile hat keinen Einfluss auf die Zählung. Wenn Sie eine aktuelle version von GNU
grep
, die-o
option verwendet, in einer anderen Antwort wird sicher das gleiche.In jedem Fall ist sicherzustellen, dass das Muster, das Sie ein match gegen ist nicht nur
$word
oder Wörter mit der gleichen Wurzel passen zu (oder verwenden Sie den-w
Schalter).grep -o
zählt die tatsächliche Anzahl der vorkommen, und nicht auf Zeilen.Ich habe eine Anmerkung nur Sie war tiping. Es ist nicht das zählen von selbst, aber es tut, begrenzen Sie den Ausgang schön.
InformationsquelleAutor lynxlynxlynx
Einige der Lösungen stimmten mit der tr-Befehl konnte nicht mit der situation umzugehen, wo es mit dem verlinkten Wort wie "filefile". Hier ist meine Lösung mit Perl:
Das -p sagt perl ausführen einer Schleife und auf der echo-Ausgabe.
Die-e-gibt an, dass die one-line-Programm ist, kommt als Nächstes.
InformationsquelleAutor Hongyu Zhang
...Ich mag es einfach zu halten:
oder
InformationsquelleAutor user3166820
Verwenden Sie den folgenden Befehl ein :-
weniger Dateiname | grep wordToBeSearched | wc -l
Hier ist weniger die Art der editor, den Sie verwenden möchten
Wenn Sie möchten, verwenden Sie nano-editor, dann verwenden Sie den folgenden Befehl ein :-
nano Dateiname | grep wordToBeSearched | wc -l
Hier wc steht für word count und -l für die Anzahl der Zeilen, die dieses Wort.
InformationsquelleAutor Dhumil Agarwal
Ich fand, dass dies der einfachste Weg:
Den
-o
option ingrep
gibt an, zu zählen, jedes auftreten, nicht nur die Anzahl der passenden Zeilen.Den
-w
option inwc
zählen nur ganze Wörter.InformationsquelleAutor Siddharth Dushantha
Code:
InformationsquelleAutor ajendra