Szukam polecenia zliczającego liczbę wszystkich słów w pliku. Na przykład jeśli plik jest taki,
today is a
good day
to powinno się wydrukować 5
, ponieważ są 5
tam słowa.
text-processing
wc
Richard
źródło
źródło
wc -w $FILE
?Odpowiedzi:
Polecenie
wc
aka. liczba słów może to zrobić:przykład
źródło
wc -w
nie mają takiej samej definicji jak dla GNUgrep -w
. Dlawc
słowa jest sekwencją jednego lub więcej znaków niż kosmiczne ([:space:]
klasa znaków w bieżącej lokalizacji). Na przykład,foo,bar
ifoo bar
(o nierozdzielającą przestrzeni) każdy jeden wyraz.Wymyśliłem to po prostu numer:
Podoba mi się również
wc -w < [file]
podejścieWreszcie, do przechowywania tylko liczby słów w zmiennej, możesz użyć:
Pozwala to elegancko pominąć nazwę pliku.
źródło
wc -w < "$file"
po prostu numer.Lepszym rozwiązaniem jest użycie Perla:
@Bernhard
Możesz sprawdzić kod źródłowy
wc
polecenia z coreutils, testuję na moim komputerze, z plikiemsubst.c
w źródle bash 4.2.I
Im większy plik, tym bardziej wydajny jest Perl w stosunku do
wc
.źródło
wc
zabrało ~ 14 sekund, podczas gdy Perl zajął ~ 5 sekund!split
/\s+/
split(' ')
(split(" ", $_))
echo -e "unix\n linux" > testfile
wc
będzie znacznie szybszy, podobnie jak zPERLIO=:utf8
,perl
będzie znacznie wolniejszy.Użyjmy AWK!
Podaje częstotliwość każdego słowa występującego w dostarczonym pliku. Wiem, że nie o to prosiłeś, ale lepiej! Jeśli chcesz zobaczyć wystąpienia swojego słowa, możesz po prostu to zrobić:
Dodałem nawet tę funkcję do moich plików .dotfiles
Źródło: AWK-ward Ruby
źródło
W
wc
programie liczy „Słowa”, ale nie są to na przykład „słowa”, że wiele osób będzie zobaczyć, kiedy zbadać plik. Navi
przykład program używa innej miary „słów”, ograniczając je w oparciu o ich klasy znaków, awc
po prostu liczy rzeczy oddzielone spacjami . Te dwa środki mogą się radykalnie różnić. Rozważ ten przykład:vi
widzi trzy słowa ( pierwszy i drugi oraz przecinek oddzielający je), awc
widzi jedno (w tym wierszu nie ma białych znaków). Istnieje wiele sposobów liczenia słów, niektóre są mniej przydatne niż inne.Chociaż Perl byłyby lepiej przystosowane do pisania licznik za słowa vi stylu, oto krótki przykład przy użyciu
sed
,tr
iwc
(umiarkowanie przenośny za pomocą dosłownych powrotu karetki^M
):Porównywanie liczby:
wc
daje 28.W celach informacyjnych POSIX vi mówi:
źródło