Count Vorkommen eines char in Klartextdatei
Frage
Gibt es eine Möglichkeit unter Linux / Terminal zu zählen, wie oft char f tritt in einer Textdatei?
Lösung
Wie wäre es damit:
fgrep -o f <file> | wc -l
. Hinweis: Neben viel leichter merken / duplizieren und anpassen, das ist etwa dreimal (! Sorry, bearbeiten verpfuschte der erste Test) schneller als Vereb Antwort
Andere Tipps
noch schneller:
tr -cd f < file | wc -c
Zeit für diesen Befehl mit einer Datei mit 4,9 MB und 1100000 Vorkommen des gesuchten Zeichens:
real 0m0.089s
user 0m0.057s
sys 0m0.027s
Zeit für Vereb Antwort mit echo
, cat
, tr
und bc
für die gleiche Datei:
real 0m0.168s
user 0m0.059s
sys 0m0.115s
Zeit für Rob Hruska Antwort mit tr
, sed
und wc
für die gleiche Datei:
real 0m0.465s
user 0m0.411s
sys 0m0.080s
Zeit für Jefromi Antwort mit fgrep
und wc
für die gleiche Datei:
real 0m0.522s
user 0m0.477s
sys 0m0.023s
echo $(cat <file> | wc -c) - $(cat <file> | tr -d 'A' | wc -c) | bc
, wo die A das Zeichen
Zeit für diesen Befehl mit einer Datei mit 4,9 MB und 1100000 Vorkommen des gesuchten Zeichens:
real 0m0.168s
user 0m0.059s
sys 0m0.115s
Wenn alles, was Sie tun müssen, ist die Anzahl der Zeilen mit Ihrem Charakter zählt, dies funktionieren wird:
grep -c 'f' myfile
Allerdings zählt mehrere Vorkommen von ‚f‘ auf der gleichen Linie wie einem Einzelspiel.
tr -d '\n' < file | sed 's/A/A\n/g' | wc -l
Ersetzen die beiden Vorkommen von „A“ mit Ihrem Charakter und „Datei“ mit Ihrer Eingabedatei.
-
tr -d '\n' < file
: entfernt Zeilenumbrüche -
sed 's/A/A\n/g
: fügt eine neue Zeile nach jedem Auftreten von "A" -
wc -l
: zählt die Anzahl der Zeilen
Beispiel:
$ cat file
abcdefgabcdefgababababbbba
1234gabca
$ tr -d '\n' < file | sed 's/a/a\n/g' | wc -l
9