Wiadomo, że programy z interfejsem graficznym są wygodniejsze w użyciu, ponieważ są zaprojektowane z myślą o wysokich wymaganiach, a ponadto terminal pozwala na znacznie szybsze rozwiązywanie niektórych zadań. Tak więc istnieje narzędzie wc, które może policzyć liczbę linii w pliku. Liczba linii nie mówi zbyt wiele, ale w przypadku, gdy kilka poleceń jest połączonych, można policzyć linie, biorąc pod uwagę niezbędne parametry. Jak policzyć linie w pliku Linux? Podkreślmy kilka prostych, ale skutecznych przykładów użycia poleceń grep, sed i awk.
Przyjrzeliśmy się już poleceniu WC, teraz powinniśmy zapoznać się z jednym z jego kluczowych parametrów -l
. Zlicza on przejścia do nowej linii, czyli zliczana jest cała linia, łącznie z pustymi liniami. Komenda radzi sobie z zadaniem szybciej niż wszystkie inne, ale możliwe są tylko niektóre ciągi - z określonym warunkiem.
$ wc -l name_file
$ grep -c $ name_file
$ sed -n $= name_file
$ awk 'END{ print NR }' name_file
Jak widzimy, wynik jest taki sam, ale polecenie wc zajęło mniej czasu na wykonanie zadania. Pozostałe polecenia mają zastosowanie w przypadku złożonych zapytań. Polecenie grep umożliwia wyszukiwanie ciągów zawierających tylko tekst: grep -c 'text' nazwa_pliku
.
$ grep -c 'text' file_name
Polecenie grep obsługuje wyrażenia regularne, dzięki czemu można łączyć wiele warunków AND, OR, NOT.
Podczas sed wykonuje przetwarzanie tekstu, ale znacznie łatwiej jest wykonać końcowe liczenie linii za pomocą polecenia wc. Można usunąć wszystkie linie, które mają mniej niż trzy znaki, a złożone przypadki są liczone bez komentarzy.
$ sed -r '/^.{,3}$/d' file_name | wc -l
Jeśli zadanie jest proste, można je wykonać w inny sposób. Polecenie awk będzie prostsze i łatwiejsze do zrozumienia.
$ awk 'length >3' file_name | wc -l
Aby zapoznać się z wizualnym przykładem polecenia awk, wykonajmy zliczanie ciągów znaków podczas wyszukiwania wymaganej wartości w pliku tabeli csv.
W przykładzie policzmy liczbę wierszy z wartością drugiego parametru większą niż 50.
$ awk '$2+0 > 50' file_name | wc -l
Dodaj 0 do wyrażenia, aby usunąć wszystkie wyrażenia nienumeryczne.