Frage

Gibt es eine Möglichkeit unter Linux / Terminal zu zählen, wie oft char f tritt in einer Textdatei?

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top