Gibt es unter Linux / Terminal eine Möglichkeit zu zählen, wie oft das Zeichen f in einer Nur-Text-Datei vorkommt?
Gibt es unter Linux / Terminal eine Möglichkeit zu zählen, wie oft das Zeichen f in einer Nur-Text-Datei vorkommt?
Antworten:
Wie wäre es damit:
fgrep -o f <file> | wc -l
Hinweis: Abgesehen davon, dass es viel einfacher ist, sich zu merken / zu duplizieren und anzupassen, ist dies ungefähr dreimal (sorry, bearbeiten! Den ersten Test verpfuscht) schneller als Verebs Antwort.
\r
oder \n
Zeichen benötigen ; Die tr -cd f
Antwort funktioniert dafür.
a
, b
und c
verwenden egrep
: egrep -o 'a|b|c' <file> | wc -l
.
wc -c
wie in der tr
Antwort zu verwenden: Da die grep
Ausgabe zeilenweise erfolgt, wc
würde das Zeilenende als Zeichen gezählt (wodurch sich die Anzahl der Zeichen verdoppelt).
\r
, aber um zu zählen, \n
warum nicht einfach verwenden wc -l
?
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
a
, b
und c
: tr -cd abc < file | wc -l
.
tr -cd abc < file | wc -c
stattdessen sein
echo $(cat <file> | wc -c) - $(cat <file> | tr -d 'A' | wc -c) | bc
wo das A das Zeichen ist
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
cat
s entfernen und den Dateinamen als Argument für wc
und angeben tr
.
stdin
, aber das kann eher geleitet als cat
ed:tr -d 'A' < <file> | wc ...
Wenn Sie nur die Anzahl der Zeilen zählen müssen, die Ihren Charakter enthalten, funktioniert dies:
grep -c 'f' myfile
Es werden jedoch mehrere Vorkommen von 'f' in derselben Zeile wie bei einer einzelnen Übereinstimmung gezählt.
tr -d '\n' < file | sed 's/A/A\n/g' | wc -l
Ersetzen Sie die beiden Vorkommen von "A" durch Ihren Charakter und "Datei" durch Ihre Eingabedatei.
tr -d '\n' < file
: Entfernt Zeilenumbrüchesed 's/A/A\n/g
: fügt nach jedem Auftreten von "A" eine neue Zeile hinzuwc -l
: zählt die Anzahl der ZeilenBeispiel:
$ cat file
abcdefgabcdefgababababbbba
1234gabca
$ tr -d '\n' < file | sed 's/a/a\n/g' | wc -l
9