Czy w linux / terminalu jest sposób, aby policzyć, ile razy znak f występuje w zwykłym pliku tekstowym?
Czy w linux / terminalu jest sposób, aby policzyć, ile razy znak f występuje w zwykłym pliku tekstowym?
Odpowiedzi:
Co powiesz na to:
fgrep -o f <file> | wc -l
Uwaga: Poza tym, że jest to dużo łatwiejsze do zapamiętania / powielenia i dostosowania, jest to około trzy razy (przepraszam, edycja! Spartaczył pierwszy test) szybciej niż odpowiedź Vereba.
\rlub \nznaków; tr -cd fodpowiedź działa za to.
a, bi cużyć egrep: egrep -o 'a|b|c' <file> | wc -l.
wc -cco w trodpowiedzi: ponieważ grepwyjścia wiersz po wierszu wczliczałyby końce wierszy jako znaki (stąd podwojenie liczby znaków).
\r, ale żeby policzyć, \ndlaczego nie po prostu użyć wc -l?
nawet szybciej:
tr -cd f < file | wc -c
Czas na to polecenie z plikiem o wielkości 4,9 MB i 1100000 wystąpień szukanego znaku:
real 0m0.089s
user 0m0.057s
sys 0m0.027s
Czas na Vereb odpowiedzi z echo, cat, tri bcdla tego samego pliku:
real 0m0.168s
user 0m0.059s
sys 0m0.115s
Czas na Rob HRUŠKA odpowiedzieć tr, sedi wcdla tego samego pliku:
real 0m0.465s
user 0m0.411s
sys 0m0.080s
Czas na odpowiedź Jefromiego z fgrepi wcdla tego samego pliku:
real 0m0.522s
user 0m0.477s
sys 0m0.023s
a, bi c: tr -cd abc < file | wc -l.
tr -cd abc < file | wc -czamiast tego
echo $(cat <file> | wc -c) - $(cat <file> | tr -d 'A' | wc -c) | bc
gdzie A to znak
Czas na to polecenie z plikiem o wielkości 4,9 MB i 1100000 wystąpień szukanego znaku:
real 0m0.168s
user 0m0.059s
sys 0m0.115s
catpliki, podając nazwę pliku jako argument do wci tr.
stdin, ale to może być raczej przesyłane niż cated:tr -d 'A' < <file> | wc ...
Jeśli wszystko, co musisz zrobić, to policzyć liczbę linii zawierających twoją postać, zadziała:
grep -c 'f' myfile
Jednak zlicza wielokrotne wystąpienia „f” w tym samym wierszu jako pojedyncze dopasowanie.
tr -d '\n' < file | sed 's/A/A\n/g' | wc -l
Zastąpienie dwóch wystąpień „A” swoim znakiem i „plikiem” plikiem wejściowym.
tr -d '\n' < file: usuwa nowe liniesed 's/A/A\n/g: dodaje nowy wiersz po każdym wystąpieniu „A”wc -l: liczy liczbę liniiPrzykład:
$ cat file
abcdefgabcdefgababababbbba
1234gabca
$ tr -d '\n' < file | sed 's/a/a\n/g' | wc -l
9