Technicznie można to uznać za sh / bash / etc. pytanie programistyczne, więc myślę, że ma to znaczenie w każdym miejscu.
Rob Hruska
@Rob Hruska: tak, ja też myślę, że to programowanie w bashu ... @abrashka: odpowiedź na twoje pierwsze i drugie pytanie brzmi „NIE”!
cupakob
Odpowiedzi:
180
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.
Ten nie działa, jeśli potrzebujesz liczyć \rlub \nznaków; tr -cd fodpowiedź działa za to.
bjnord
3
Aby policzyć kilka znaków, np a, bi cużyć egrep: egrep -o 'a|b|c' <file> | wc -l.
Skippy le Grand Gourou
Uważaj również, aby NIE używać tego, wc -cco w trodpowiedzi: ponieważ grepwyjścia wiersz po wierszu wczliczałyby końce wierszy jako znaki (stąd podwojenie liczby znaków).
Skippy le Grand Gourou
@bjnord Ok \r, ale żeby policzyć, \ndlaczego nie po prostu użyć wc -l?
Skippy le Grand Gourou
69
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:
Odpowiedzi:
Co powiesz na to:
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.
źródło
\r
lub\n
znaków;tr -cd f
odpowiedź działa za to.a
,b
ic
użyćegrep
:egrep -o 'a|b|c' <file> | wc -l
.wc -c
co wtr
odpowiedzi: ponieważgrep
wyjścia wiersz po wierszuwc
zliczałyby końce wierszy jako znaki (stąd podwojenie liczby znaków).\r
, ale żeby policzyć,\n
dlaczego nie po prostu użyćwc -l
?nawet szybciej:
Czas na to polecenie z plikiem o wielkości 4,9 MB i 1100000 wystąpień szukanego znaku:
Czas na Vereb odpowiedzi z
echo
,cat
,tr
ibc
dla tego samego pliku:Czas na Rob HRUŠKA odpowiedzieć
tr
,sed
iwc
dla tego samego pliku:Czas na odpowiedź Jefromiego z
fgrep
iwc
dla tego samego pliku:źródło
a
,b
ic
:tr -cd abc < file | wc -l
.tr -cd abc < file | wc -c
zamiast tegogdzie A to znak
Czas na to polecenie z plikiem o wielkości 4,9 MB i 1100000 wystąpień szukanego znaku:
źródło
cat
pliki, podając nazwę pliku jako argument dowc
itr
.stdin
, ale to może być raczej przesyłane niżcat
ed:tr -d 'A' < <file> | wc ...
Jeśli wszystko, co musisz zrobić, to policzyć liczbę linii zawierających twoją postać, zadziała:
Jednak zlicza wielokrotne wystąpienia „f” w tym samym wierszu jako pojedyncze dopasowanie.
źródło
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:
źródło