Awk

Как да разделим файл с низове с Awk

Как да разделим файл с низове с Awk
Командата Linux awk (съкратено от имената на разработчиците; Aho, Weinberger и Kernighan) е чудесен начин за обработка и анализ на файл от низове. За да бъдат файловете по-информативни, те трябва да бъдат организирани под формата на редове и колони. След това можете да използвате awk на тези файлове, за да:

В тази статия ще обясним основното използване на командата awk и как тя може да се използва за разделяне на файл от низове. Изпълнихме примерите от тази статия върху система за Debian 10 Buster, но те могат лесно да бъдат репликирани на повечето дистрибуции на Linux.

Примерният файл, който ще използваме

Примерният файл на низове, който ще използваме, за да демонстрираме използването на командата awk, е както следва:

Това показва всяка колона от примерния файл:

Пример 1: Използвайте Awk, за да отпечатате всички редове на файл

Отпечатването на всеки ред от определен файл е поведението по подразбиране на командата awk. В следващия синтаксис на командата awk, ние не посочваме никакъв шаблон, който awk трябва да отпечата, поради което командата трябва да приложи действието “print” към всички редове на файла.

Синтаксис:

$ awk 'print' име на файл.текст

Пример:

В този пример казвам на командата awk да отпечата съдържанието на моя примерен файл, ред по ред.

$ awk 'print' sample_file.текст

Пример 2: Използвайте awk, за да отпечатате само редовете, които съответстват на даден шаблон

С awk можете да зададете шаблон и командата ще отпечата само редовете, съответстващи на този шаблон.

Синтаксис:

$ awk '/ pattern_to_be_matched / print' име на файл.текст

Пример:

От примерния файл, ако искам да отпечатам само редовете, които съдържат променливата „B“, мога да използвам следната команда:

$ awk '/ B / print' sample_file.текст

За да направя примера по-смислен, позволете ми да отпечатам само информацията за служителите, които са „професорски“.

$ awk '/ Professor / print' sample_file.текст

Командата отпечатва само редовете / записите, които съдържат низа „професор“, така че имаме по-ценна информация, получена от данните.

Пример 3. Използвайте awk, за да разделите файла, така че да се отпечатат само определени полета / колони

Вместо да отпечатвате целия файл, можете да направите awk да отпечатва само конкретни колони от файла. Awk третира всички думи, разделени с празно пространство, в ред като запис на колона по подразбиране. Той съхранява записа в променлива $ N. Когато $ 1 представлява първата дума, $ 2 съхранява втората дума, $ 3 четвъртата и т.н. $ 0 съхранява целия ред, така че кой ред се отпечатва, както е обяснено в пример 1.

Синтаксис:

$ awk 'print $ N, .. .' име на файл.текст

Пример:

Следващата команда ще отпечата само първата колона (име) и втората колона (тема) на моя примерен файл:

$ awk 'print $ 1, $ 2' sample_file.текст

Пример 4: Използвайте Awk, за да преброите и отпечатате броя на редовете, в които се съчетава шаблон

Можете да кажете на awk да преброи броя на редовете, в които се съпоставя определен модел, и след това да изведете, че 'count'.

Синтаксис:

$ awk '/ pattern_to_be_matched / ++ cnt END print "Count =", cnt'
име на файл.текст

Пример:

В този пример искам да преброя броя на хората, преподаващи предмета „английски”. Затова ще кажа на командата awk да съвпада с модела „английски“ и да отпечатва броя на редовете, в които съответства този шаблон.

$ awk '/ английски / ++ cnt END print "Count =", cnt' sample_file.текст

Преброяването тук предполага, че 2-ма души преподават английски от примерните записи на файлове.

Пример 5: Използвайте awk, за да отпечатате само редове с повече от определен брой знаци

За тази задача ще използваме вградената функция awk, наречена „дължина“. Тази функция връща дължината на входния низ. По този начин, ако искаме awk да отпечатва само редове с повече или дори по-малко от броя символи, можем да използваме функцията за дължина по следния начин:

За печат на редове с символи, по-големи от число:

$ awk 'length ($ 0)> n' име на файл.текст

За печат на редове със знаци, по-малки от число:

$ awk 'дължина ($ 0) < n' filename.txt

Където n е броят на символите, които искате да посочите за ред.

Пример:

Следващата команда ще отпечата само редовете от моя примерен файл, които имат знаци над 30:

$ awk 'дължина ($ 0)> 30' sample_file.текст

Пример 6: Използвайте awk, за да запишете изхода на командата в друг файл

Като използвате оператора за пренасочване '>', можете да използвате командата awk, за да отпечатате резултата от него в друг файл. Това е начинът, по който можете да го използвате:

$ awk 'критерии_за_печат "име на файл.txt> изходен файл.текст

Пример:

В този пример ще използвам оператора за пренасочване с моята команда awk, за да отпечатам само имената на служителите (колона 1) в нов файл:

$ awk 'print $ 1' sample_file.txt> имена на служители.текст

Проверих чрез командите cat, че новият файл съдържа само имената на служителите.

Пример 7: Използвайте awk, за да отпечатате само непразни редове от файл

Awk има някои вградени команди, които можете да използвате за филтриране на изхода. Например командата NF се използва за поддържане на броя на полетата в текущия входен запис. Тук ще използваме командата NF, за да отпечатаме само непразните редове на файла:

$ awk 'NF> 0' sample_file.текст

Очевидно можете да използвате следната команда, за да отпечатате празните редове:

$ awk 'NF < 0' sample_file.txt

Пример 8: Използвайте awk, за да преброите общия брой редове във файл

Друга вградена функция, наречена NR, отчита броя на входните записи (обикновено редове) на даден файл. Можете да използвате тази функция в awk, както следва, за да преброите броя на редовете във файл:

$ awk 'END print NR' sample_file.текст

Това беше основната информация, от която се нуждаете, за да започнете с разделянето на файлове с командата awk. Можете да използвате комбинацията от тези примери, за да извлечете по-смислена информация от вашия файл с низове чрез awk.

SuperTuxKart за Linux
SuperTuxKart е страхотно заглавие, създадено да ви предостави безплатно изживяването на Mario Kart във вашата Linux система. Играта е доста предизвика...
Урок за битка за Уеснот
Битката за Уеснот е една от най-популярните стратегически игри с отворен код, които можете да играете по това време. Тази игра не само се разработва о...
0 А.д. Урок
От многото стратегически игри, 0 A.д. успява да се открои като изчерпателно заглавие и много дълбока, тактическа игра, въпреки че е с отворен код. Раз...