Известно е, че програмите с графичен интерфейс са по-удобни за използване, тъй като са проектирани за високи изисквания, а освен това терминалът ви позволява да решавате определени задачи много по-бързо. Така например има помощна програма wc, която може да преброи броя на редовете в даден файл. Броят на редовете не говори много, но в случай че се комбинират няколко команди, можете да преброите редовете, като вземете предвид необходимите параметри. Как да преброим редовете във файл в Linux? Нека разгледаме няколко прости, но ефективни примера за използване на командите grep, sed и awk.
Вече разгледахме командата WC, а сега трябва да се запознаем с един от ключовите ѝ параметри -l
. Той отчита преходите към нов ред, т.е. брои се целият ред, включително празните редове. Командата се справя със задачата по-бързо от всички останали, но са възможни само определени редове - с дадено условие.
$ wc -l name_file
$ grep -c $ name_file
$ sed -n $= name_file
$ awk 'END{ print NR }' name_file
Както виждаме, резултатът е същият, но командата wc е отнела по-малко време за изпълнение на задачата. Останалите команди са приложими за сложни заявки. Командата grep ви позволява да намирате низове само с текст: grep -c 'text' file_name
.
$ grep -c 'text' file_name
Командата grep работи с регулярни изрази, така че можете да комбинирате няколко условия AND, OR, NOT.
При sed се извършва обработка на текст, но е много по-лесно да се извърши окончателно преброяване на редовете с командата wc. Можете да изтриете всички редове, които са с дължина по-малка от три символа. и сложните случаи се броят без коментари.
$ sed -r '/^.{,3}$/d' file_name | wc -l
Ако задачата е проста. тя може да бъде изпълнена по други начини. Командата awk ще бъде по-проста и по-лесна за разбиране.
$ awk 'length >3' file_name | wc -l
За нагледен пример на командата awk, нека извършим преброяване на низове, докато търсим необходимата стойност във файл с таблица csv.
В примера нека преброим броя на редовете със стойност на втория параметър по-голяма от 50.
$ awk '$2+0 > 50' file_name | wc -l
Добавете 0 към израза, за да премахнете всички нецифрови изрази.