Mam takie linie i chcę wiedzieć, ile faktycznie mam linii ...
09:16:39 AM all 2.00 0.00 4.00 0.00 0.00 0.00 0.00 0.00 94.00
09:16:40 AM all 5.00 0.00 0.00 4.00 0.00 0.00 0.00 0.00 91.00
09:16:41 AM all 0.00 0.00 4.00 0.00 0.00 0.00 0.00 0.00 96.00
09:16:42 AM all 3.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 96.00
09:16:43 AM all 0.00 0.00 1.00 0.00 1.00 0.00 0.00 0.00 98.00
09:16:44 AM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
09:16:45 AM all 2.00 0.00 6.00 0.00 0.00 0.00 0.00 0.00 92.00
Czy istnieje sposób, aby policzyć je wszystkie za pomocą poleceń linux?
linux
bash
command-line
scripting
Alucard
źródło
źródło
g <Ctrl-g>
, pokaże ci liczbę wierszy, słów, kolumn i bajtów<esc> :q!
to jedyna odpowiedź. (To jest żart, to usunie wszystkie niezapisane zmiany - żartem jest to, że jeśli nie znasz vima, łatwo jest zepsuć plik, więc lepiej go nie zapisywać).Odpowiedzi:
Użyj
wc
:Spowoduje to wyświetlenie liczby wierszy w
<filename>
:Lub, aby pominąć
<filename>
wynik, użyjwc -l < <filename>
:Możesz także przesyłać dane do
wc
:źródło
wc -l <file> | awk '{print $1}
wc -l < <filename>
cat <file> | wc -l
watch wc -l <filename>
możesz śledzić ten plik w czasie rzeczywistym. Jest to przydatne na przykład w plikach dziennika.Aby policzyć wszystkie linie, użyj:
Aby filtrować i liczyć tylko linie z wzorkiem, użyj:
Lub użyj -v, aby odwrócić dopasowanie:
Zobacz stronę man grep, aby zobaczyć argumenty -e, -i i -x ...
źródło
grep -c
działa dla mnie lepiej. Głównie ze względu nawc -l
irytujący prefiks „padu” dla padania.Lub
źródło
jest wiele sposobów. używanie
wc
jest jednym.wc -l file
inne obejmują
awk 'END{print NR}' file
sed -n '$=' file
(GNU sed)źródło
wc -l file
podaje liczbę wierszy ORAZ nazwę pliku, aby uzyskać tylko nazwę pliku, którą możesz wykonać:filename.wc -l < /filepath/filename.ext
grep -Hc ".*" file
wc -l
liczy znaki nowego wiersza, a nie rzeczywiste wiersze w pliku. Wszystkie pozostałe polecenia zawarte w tej odpowiedzi podadzą ci odpowiednią liczbę na wypadek, gdybyś potrzebował linii.Narzędzie
wc
to „licznik słów” w systemach operacyjnych UNIX i podobnych do systemu UNIX, ale można go również używać do zliczania wierszy w pliku poprzez dodanie-l
opcji.wc -l foo
policzy liczbę linii wfoo
. Możesz także przesyłać dane wyjściowe z takiego programu:,ls -l | wc -l
który powie ci, ile plików znajduje się w bieżącym katalogu (plus jeden).źródło
ls -l | wc -l
poda liczbę plików w katalogu +1 dla linii o całkowitym rozmiarze. możesz zrobić,ls -ld * | wc -l
aby uzyskać prawidłową liczbę plików.Jeśli chcesz sprawdzić całkowitą linię wszystkich plików w katalogu, możesz użyć find i wc:
źródło
Użyj
wc
:źródło
Jeśli wszystko czego potrzebujesz to liczba linii (a nie liczba linii i głupia nazwa pliku powracającego):
Jak wspomniano wcześniej, działają one również (ale są gorsze z innych powodów):
źródło
Użyj w
nl
ten sposób:Od
man nl
:źródło
wc -l
wartość 0. Dziękuję.Korzystałem z tego:
Wolę ją od zaakceptowanej odpowiedzi, ponieważ nie drukuje ona nazwy pliku i nie musisz
awk
jej naprawiać. Zaakceptowana odpowiedź:wc -l myfile.txt
Ale myślę, że najlepsza jest odpowiedź GGB667:
wc -l < myfile.txt
Prawdopodobnie będę go teraz używać. Jest nieco krótszy niż moja droga. Poddaję swój stary sposób robienia tego na wypadek, gdyby ktoś go preferował. Dane wyjściowe są takie same dla tych dwóch metod.
źródło
Powyżej znajduje się preferowana metoda, ale pomocne może być również polecenie „cat”:
Pokaże całą zawartość pliku z numerami linii.
źródło
Widziałem to pytanie, gdy szukałem sposobu zliczania wielu linii plików, więc jeśli chcesz policzyć wiele linii pliku .txt, możesz to zrobić,
będzie również działać na jednym pliku .txt;)
źródło
wc -l
nie liczy linii.Tak, ta odpowiedź może być nieco spóźniona na przyjęcie, ale nie znalazłem jeszcze nikogo, kto udokumentowałby bardziej solidne rozwiązanie w odpowiedziach.
Wbrew powszechnemu przekonaniu POSIX wcale nie wymaga, aby pliki kończyły się znakiem nowej linii. Tak, definicja linii POSIX 3.206 jest następująca:
Jednak wiele osób nie zdaje sobie sprawy, że POSIX definiuje również POSIX 3.195 Niekompletna linia jako:
Dlatego pliki bez końcowego
LF
są idealnie zgodne z POSIX.Jeśli zdecydujesz się nie obsługiwać obu typów EOF, twój program nie będzie zgodny z POSIX.
Jako przykład przyjrzyjmy się poniższemu plikowi.
Bez względu na EOF, jestem pewien, że zgodziłbyś się, że istnieją dwie linie. Przekonałeś się, patrząc na to, ile linii zostało uruchomionych, a nie na ile linii zostało zakończonych. Innymi słowy, zgodnie z POSIX, oba te pliki mają taką samą liczbę linii:
Strona podręcznika jest dość jasna, jeśli chodzi o
wc
liczenie nowych linii, przy czym nowa linia jest tylko0x0a
postacią:Dlatego
wc
nawet nie próbuje policzyć czegoś, co można nazwać „linią”. Używaniewc
do liczenia linii może bardzo dobrze prowadzić do błędnych rachunków, w zależności od EOF pliku wejściowego.Rozwiązanie zgodne z POSIX
Możesz użyć
grep
do zliczenia linii, tak jak w powyższym przykładzie. To rozwiązanie jest zarówno bardziej niezawodne, jak i precyzyjne, i obsługuje wszystkie różne smaki tego, czym może być linia w pliku:źródło
grep -oE '\d+'
W celu powrotu numery dwucyfrowe TYLKO .źródło
Zwraca tylko liczbę wierszy
źródło
Przekierowanie / potokowanie danych wyjściowych pliku
wc -l
powinno wystarczyć, jak poniżej:co zapewniłoby nie. tylko linii.
źródło
Lub policz wszystkie wiersze w podkatalogach ze wzorcem nazwy pliku (np. Pliki dziennika ze znacznikami czasu w nazwie pliku):
źródło
Wiem, że to stare, ale wciąż: Policz przefiltrowane linie
Mój plik wygląda następująco:
Jeśli chcę wiedzieć, ile plików jest wysyłanych, OK:
LUB
źródło
policz liczbę wierszy i zapisz wynik w zmiennej użyj tego polecenia:
count=$(wc -l < file.txt) echo "Number of lines: $count"
źródło
Jak powiedzieli inni,
wc -l
jest to najlepsze rozwiązanie, ale w przyszłości możesz użyć Perla:$.
zawiera numer wiersza, aEND
blok wykona się na końcu skryptu.źródło
dir | perl -lne 'END { print $. }' Can't find string terminator "'" anywhere before EOF at -e line 1.'
perl -lne '}{ print $. '
robi to samo.Właśnie stworzyłem program, aby to zrobić (z
node
)https://github.com/danschumann/gimme-lines/tree/master
źródło
wc -l <filename>
To da ci liczbę wierszy i nazwę pliku wyjściowego.
Na przykład.
wc -l 24-11-2019-04-33-01-url_creator.log
Wynik
63 24-11-2019-04-33-01-url_creator.log
Posługiwać się
wc -l <filename>|cut -d\ -f 1
aby uzyskać tylko liczbę wierszy w danych wyjściowych.
Na przykład.
wc -l 24-11-2019-04-33-01-url_creator.log|cut -d\ -f 1
Wynik
63
źródło
wc -l < filename
wc -l < filename
różni się od tegowc -l filename
, że najpierw używa przekierowania, a następnie w danych wyjściowych nie ma nazwy pliku, jak pokazano w odpowiedzi od user85509Ta funkcja przenośnej powłoki [ℹ] działa jak urok. Wystarczy dodać następujący fragment kodu do
.bashrc
pliku (lub odpowiednik środowiska powłoki) .Powinno to być w pełni kompatybilne ze wszystkimi powłokami zgodnymi z POSIX, oprócz bash i zsh .
źródło