40 Linux және BSD жүйелеріндегі практикалық және пайдалы awk пәрмені


AWK - бұл Unix-тің алғашқы күндерінен бастау алатын қуатты деректерге негізделген бағдарламалау тілі. Ол бастапқыда «бір қатарлы» бағдарламаларды жазу үшін жасалған, бірақ содан кейін толыққанды бағдарламалау тіліне айналды. AWK өз атауын авторларының – Ахо, Вайнбергер және Керниганның бас әріптерінен алады. Linux және басқа Unix жүйелеріндегі awk пәрмені AWK сценарийлерін іске қосатын аудармашыны шақырады. Соңғы жүйелерде awk-тің бірнеше іске асырылуы бар, мысалы, gawk (GNU awk), mawk (Minimal awk) және nawk (New awk), т.б. awk-ті меңгергіңіз келсе, төмендегі мысалдарды қараңыз.

AWK бағдарламаларын түсіну


awk тілінде жазылған бағдарламалар жай ғана үлгілер мен әрекеттер жұбы болып табылатын ережелерден тұрады. Үлгілер {} жақша ішінде топтастырылған және awk үлгіге сәйкес мәтіндерді тапқан сайын әрекет бөлігі іске қосылады. awk бір лайнерді жазу үшін әзірленгенімен, тәжірибелі пайдаланушылар онымен күрделі сценарийлерді оңай жаза алады.

AWK бағдарламалары үлкен көлемдегі файлдарды өңдеу үшін өте пайдалы. Ол арнайы таңбалар мен бөлгіштердің көмегімен мәтіндік өрістерді анықтайды. Ол сонымен қатар массивтер мен циклдар сияқты жоғары деңгейлі бағдарламалау құрылымдарын ұсынады. Сондықтан қарапайым awk көмегімен сенімді бағдарламаларды жазу өте мүмкін.

Linux жүйесіндегі awk пәрменінің практикалық мысалдары


Әкімшілер әдетте файлдарды өңдеудің басқа түрлерімен қатар деректерді алу және есеп беру үшін awk пайдаланады. Төменде біз awk туралы толығырақ талқыладық. Пәрмендерді мұқият орындаңыз және толық түсіну үшін оларды терминалда қолданып көріңіз.

1. Мәтінді шығарудан арнайы өрістерді басып шығару


Ең көп қолданылатын Linux пәрмендері әртүрлі өрістерді пайдалана отырып, олардың шығысын көрсетеді. Әдетте мұндай деректерден белгілі бір өрісті шығару үшін Linux cut пәрменін қолданамыз. Дегенмен, төмендегі пәрмен мұны awk пәрмені арқылы қалай жасау керектігін көрсетеді.

$ who | awk '{print $1}'

Бұл пәрмен who командасының шығысындағы бірінші өрісті ғана көрсетеді. Осылайша, сіз қазір тіркелген барлық пайдаланушылардың пайдаланушы атын аласыз. Мұнда $1 бірінші өрісті білдіреді. N-ші өрісті шығарып алғыңыз келсе, $N пайдалануыңыз керек.

2. Мәтінді шығарудан бірнеше өрістерді басып шығару


awk интерпретаторы бізге қалаған өрістердің кез келген санын басып шығаруға мүмкіндік береді. Төмендегі мысалдар кім пәрменінің шығысынан алғашқы екі өрісті шығару жолын көрсетеді.

$ who | awk '{print $1, $2}'

Сондай-ақ шығыс өрістерінің ретін басқаруға болады. Келесі мысал алдымен who пәрменімен жасалған екінші бағанды, содан кейін екінші өрістегі бірінші бағанды көрсетеді.

$ who | awk '{print $2, $1}'

Толық деректерді көрсету үшін жай ғана өріс параметрлерін ($N) қалдырыңыз.

3. BEGIN мәлімдемелерінпайдаланыңыз


BEGIN операторы пайдаланушыларға шығыстағы кейбір белгілі ақпаратты басып шығаруға мүмкіндік береді. Ол әдетте awk арқылы жасалған шығыс деректерін пішімдеу үшін қолданылады. Бұл мәлімдеменің синтаксисі төменде көрсетілген.

BEGIN { Actions}
{ACTION}

BEGIN бөлімін құрайтын әрекеттер әрқашан іске қосылады. Содан кейін awk қалған жолдарды бір-бірлеп оқиды және бірдеңе істеу керек пе екенін көреді.

$ who | awk 'BEGIN {print "User\tFrom"} {print $1, $2}'

Жоғарыдағы пәрмен who командасының шығысынан алынған екі шығыс өрісін белгілейді.

4. END мәлімдемелерінпайдаланыңыз


Сондай-ақ, операцияңыздың соңында белгілі бір әрекеттер әрқашан орындалатынына көз жеткізу үшін END операторын пайдалануға болады. Негізгі әрекеттер жинағынан кейін АЯҚТАУ бөлімін жай ғана қойыңыз.

$ who | awk 'BEGIN {print "User\tFrom"} {print $1, $2} END {print "--COMPLETED--"}'

Жоғарыдағы пәрмен шығыстың соңына берілген жолды қосады.

5. Үлгілерді пайдаланып іздеу


Awk жұмысының үлкен бөлігі үлгіні сәйкестендіру мен регексті қамтиды. Жоғарыда талқылағанымыздай, awk әрбір кіріс жолындағы үлгілерді іздейді және сәйкестік іске қосылған кезде ғана әрекетті орындайды. Біздің бұрынғы ережелеріміз тек әрекеттерден тұрды. Төменде біз Linux жүйесіндегі awk пәрменін пайдаланып үлгіні сәйкестендіру негіздерін суреттедік.

$ who | awk '/mary/ {print}'

Бұл пәрмен mary пайдаланушысы қазір жүйеге кіргенін немесе кірмегенін көреді. Кез келген сәйкестік табылса, ол бүкіл жолды шығарады.

6. Файлдардан ақпарат алу


awk пәрмені файлдармен өте жақсы жұмыс істейді және оны күрделі файлдарды өңдеу тапсырмалары үшін пайдалануға болады. Келесі пәрмен awk файлдарды қалай өңдейтінін көрсетеді.

$ awk '/hello/ {print}' /usr/share/dict/american-english

Бұл пәрмен американдық-ағылшынша сөздік файлында «сәлем» үлгісін іздейді. Ол Linux негізіндегі дистрибутивтердің көпшілігінде қол жетімді. Осылайша, бұл файлда awk бағдарламаларын оңай көруге болады.

7. AWK сценарийін бастапқы файлдан оқыңыз


Бір қатарлы бағдарламаларды жазу пайдалы болғанымен, толық awk арқылы үлкен бағдарламаларды да жазуға болады. Сіз оларды сақтап, бастапқы файлды пайдаланып бағдарламаңызды іске қосқыңыз келеді.

$ awk -f script-file
$ awk --file script-file

-f немесе –файл опциясы бағдарлама файлын көрсетуге мүмкіндік береді. Дегенмен, скрипт-файл ішінде тырнақшаларды (‘ ‘) пайдаланудың қажеті жоқ, себебі Linux қабығы бағдарлама кодын осылай түсіндіре алмайды.

8. Енгізу өрісін бөлгіштіорнату


Өріс бөлгіші - кіріс жазбасын бөлетін бөлгіш. -F немесе –field-separator опциясын пайдаланып awk үшін өріс бөлгіштерін оңай көрсете аламыз. Бұл қалай жұмыс істейтінін көру үшін төмендегі пәрмендерді тексеріңіз.

$ echo "This-is-a-simple-example" | awk -F - ' {print $1} '
$ echo "This-is-a-simple-example" | awk --field-separator - ' {print $1} '

Ол Linux жүйесінде бір қатарлы awk пәрменін емес, сценарий файлдарын пайдаланғанда бірдей жұмыс істейді.

9. Шартқа негізделген ақпаратты басып шығару


Біз алдыңғы нұсқаулықта Linux кесу пәрменін талқыладық. Енді біз сізге белгілі бір критерийлер сәйкес келген кезде ғана awk көмегімен ақпаратты қалай шығару керектігін көрсетеміз. Біз сол нұсқаулықта пайдаланған сынақ файлын қолданатын боламыз. Сол жерге барып, test.txt файлының көшірмесін жасаңыз.

$ awk '$4 > 50' test.txt

Бұл пәрмен 50 миллионнан астам халқы бар test.txt файлынан барлық ұлттарды басып шығарады.

10. Тұрақты өрнектерді салыстыру арқылы ақпаратты басып шығару


Келесі awk пәрмені кез келген жолдың үшінші өрісінде «Лира» үлгісінің бар-жоғын тексереді және сәйкестік табылса, бүкіл жолды басып шығарады. Біз қайтадан Linux кесу пәрменін суреттеу үшін пайдаланылатын test.txt файлын қолданамыз. Сондықтан жалғастырмас бұрын осы файлдың бар екеніне көз жеткізіңіз.

$ awk '$3 ~ /Lira/' test.txt

Қаласаңыз, кез келген сәйкестіктің белгілі бір бөлігін ғана басып шығаруды таңдай аласыз.

11. Енгізілген жолдардың жалпы санын есептеңіз


awk пәрменінде көптеген қосымша әрекеттерді оңай орындауға мүмкіндік беретін көптеген арнайы мақсаттағы айнымалылар бар. Осындай айнымалының бірі ағымдағы жол нөмірін қамтитын NR болып табылады.

$ awk 'END {print NR} ' test.txt

Бұл пәрмен біздің test.txt файлымызда қанша жол бар екенін шығарады. Ол алдымен әрбір жолды қайталайды және END-ге жеткенде, ол NR мәнін басып шығарады - бұл жағдайда жолдардың жалпы саны бар.

12. Шығыс өрісінің бөлгішінорнату


Бұрын біз -F немесе –өріс-бөлгіш опциясын пайдаланып енгізу өрісінің бөлгіштерін қалай таңдау керектігін көрсеттік. awk пәрмені сонымен қатар шығыс өрісінің бөлгішін көрсетуге мүмкіндік береді. Төмендегі мысал мұны практикалық мысал арқылы көрсетеді.

$ date | awk 'OFS="-" {print$2,$3,$6}'

Бұл пәрмен dd-mm-yy пішімі арқылы ағымдағы күнді басып шығарады. Әдепкі шығыстың қалай көрінетінін көру үшін awk қолданбай күн бағдарламасын іске қосыңыз.

13. If Constructқолдану


Басқа танымал бағдарламалау тілдері сияқты, awk да пайдаланушыларға if-else конструкцияларын береді. awk ішіндегі if операторында төмендегі синтаксис бар.

if (expression)
{
  first_action
  second_action
}

Сәйкес әрекеттер шартты өрнек ақиқат болса ғана орындалады. Төмендегі мысал мұны біздің test.txt анықтамалық файлымыз арқылы көрсетеді.

$ awk '{ if ($4>100) print }' test.txt

Шегіністі қатаң сақтаудың қажеті жоқ.

14. If-Else конструкцияларынпайдалану


Төмендегі синтаксисті пайдаланып пайдалы if-else баспалдақтарын құра аласыз. Олар динамикалық деректермен айналысатын күрделі awk сценарийлерін жасау кезінде пайдалы.

if (expression)
  first_action
else
  second_action
$ awk '{ if ($4>100) print; else print }' test.txt

Жоғарыдағы пәрмен бүкіл анықтамалық файлды басып шығарады, себебі төртінші өріс әрбір жол үшін 100-ден көп емес.

15. Өріс енінорнату


Кейде кіріс деректері өте шатасады және пайдаланушылар оларды есептерде бейнелеу қиын болуы мүмкін. Бақытымызға орай, awk FIELDWIDTHS деп аталатын қуатты кірістірілген айнымалыны қамтамасыз етеді, ол бізге бос орындармен бөлінген ендердің тізімін анықтауға мүмкіндік береді.

$ echo 5675784464657 | awk 'BEGIN {FIELDWIDTHS= "3 4 5"} {print $1, $2, $3}'

Бұл шашыраңқы деректерді талдау кезінде өте пайдалы, өйткені біз шығыс өрісінің енін өзіміз қалағандай басқара аламыз.

16. Жазба бөлгіштіорнату


RS немесе Record Separator жазбалардың қалай бөлінетінін көрсетуге мүмкіндік беретін басқа кірістірілген айнымалы болып табылады. Алдымен осы awk айнымалысының жұмысын көрсететін файлды жасайық.

$ cat new.txt
Melinda James

23 New Hampshire

(222) 466-1234

Daniel James

99 Phonenix Road

(322) 677-3412
$ awk 'BEGIN{FS="\n"; RS=""} {print $1,$3}' new.txt

Бұл пәрмен құжатты талдайды және екі адамның аты мен мекенжайын шығарады.

17. Басып шығару ортасының айнымалылары


Linux жүйесіндегі awk пәрмені ENVIRON айнымалысы арқылы қоршаған ортаның айнымалы мәндерін оңай басып шығаруға мүмкіндік береді. Төмендегі пәрмен PATH айнымалысының мазмұнын басып шығару үшін оны қалай пайдалану керектігін көрсетеді.

$ awk 'BEGIN{ print ENVIRON["PATH"] }'

ENVIRON айнымалысының аргументін ауыстыру арқылы кез келген ортаның айнымалы мәндерінің мазмұнын басып шығаруға болады. Төмендегі пәрмен HOME айнымалы ортасының мәнін басып шығарады.

$ awk 'BEGIN{ print ENVIRON["HOME"] }'

18. Кейбір өрістерді шығарудан шығару


awk пәрмені шығарылымнан белгілі бір жолдарды алып тастауға мүмкіндік береді. Келесі пәрмен мұны біздің test.txt анықтамалық файлымыз арқылы көрсетеді.

$ awk -F":" '{$2=""; print}' test.txt

Бұл пәрмен әр елдің астана атауын қамтитын файлымыздың екінші бағанын өткізбейді. Сондай-ақ келесі пәрменде көрсетілгендей бірнеше өрісті өткізіп жіберуге болады.

$ awk -F":" '{$2="";$3="";print}' test.txt

19. Бос жолдарды жою


Кейде деректерде тым көп бос жолдар болуы мүмкін. Бос жолдарды оңай жою үшін awk пәрменін пайдалануға болады. Бұл іс жүзінде қалай жұмыс істейтінін көру үшін келесі пәрменді тексеріңіз.

$ awk '/^[ \t]*$/{next}{print}' new.txt

Біз new.txt файлынан барлық бос жолдарды қарапайым қалыпты өрнек пен келесі деп аталатын кірістірілген awk көмегімен жойдық.

20. Артқы бос орындардыжою


Көптеген Linux пәрмендерінің шығысында кейінгі бос орындар бар. Біз Linux жүйесінде бос орындар мен қойындылар сияқты бос орындарды жою үшін awk пәрменін пайдалана аламыз. awk көмегімен осындай мәселелерді қалай шешуге болатынын көру үшін төмендегі пәрменді тексеріңіз.

$ awk '{sub(/[ \t]*$/, "");print}' new.txt test.txt

Анықтамалық файлдарымызға кейбір бос орындарды қосыңыз және awk оларды сәтті шығарғанын немесе шығармағанын тексеріңіз. Бұл менің құрылғымда сәтті орындалды.

21. Әр жолдағы өрістер санынтексеріңіз


Қарапайым awk бір-лайнері арқылы жолда қанша өріс бар екенін оңай тексере аламыз. Мұны істеудің көптеген жолдары бар, бірақ біз бұл тапсырма үшін awk кірістірілген айнымалыларының кейбірін қолданамыз. NR айнымалысы бізге жол нөмірін береді, ал NF айнымалысы өрістер санын береді.

$ awk '{print NR,"-->",NF}' test.txt

Енді test.txt құжатында әр жолда қанша өріс бар екенін растай аламыз. Бұл файлдың әрбір жолында 5 өріс болғандықтан, пәрмен күткендей жұмыс істейтініне сенімдіміз.

22. Ағымдағы файл атауынтексеріңіз


FILENAME awk айнымалысы ағымдағы кіріс файл атауын тексеру үшін пайдаланылады. Біз қарапайым мысал арқылы бұл қалай жұмыс істейтінін көрсетеміз. Дегенмен, ол файл атауы анық белгісіз немесе бірнеше кіріс файлы бар жағдайларда пайдалы болуы мүмкін.

$ awk '{print FILENAME}' test.txt
$ awk '{print FILENAME}' test.txt new.txt

Жоғарыдағы пәрмендер awk кіріс файлдарының жаңа жолын өңдеген сайын жұмыс істейтін файл атауын басып шығарады.

23. Өңделген жазбалар санынтексеру


Келесі мысал awk пәрменімен өңделген жазбалардың санын қалай тексеруге болатынын көрсетеді. Linux жүйесінің көптеген әкімшілері есептерді жасау үшін awk пайдаланатындықтан, бұл олар үшін өте пайдалы.

$ awk '{print "Processing Record - ",NR;} END {print "\nTotal Records Processed:", NR;}' test.txt

Мен бұл awk үзіндісін өз әрекеттеріме нақты шолу жасау үшін жиі қолданамын. Жаңа идеяларды немесе әрекеттерді орналастыру үшін оны оңай өзгертуге болады.

24. Жазбадағы таңбалардың жалпы санын басып шығару


awk тілі жазбада қанша таңба бар екенін көрсететін length() деп аталатын ыңғайлы функцияны қамтамасыз етеді. Бұл көптеген сценарийлерде өте пайдалы. Бұл қалай жұмыс істейтінін көру үшін келесі мысалды жылдам қараңыз.

$ echo "A random text string..." | awk '{ print length($0); }'
$ awk '{ print length($0); }' /etc/passwd

Жоғарыдағы пәрмен кіріс жолының немесе файлдың әрбір жолында бар таңбалардың жалпы санын басып шығарады.

25. Ұзындығы көрсетілген ұзындықтан асатын барлық жолдарды басып шығарыңыз


Біз жоғарыдағы пәрменге кейбір шартты мәндерді қосып, оны тек алдын ала анықталған ұзындықтан үлкен жолдарды басып шығаруға мүмкіндік аламыз. Бұл белгілі бір жазбаның ұзақтығы туралы түсінік болған кезде пайдалы.

$ echo "A random text string..." | awk 'length($0) > 10'
$ awk '{ length($0) > 5; }' /etc/passwd

Талаптарыңызға қарай пәрменді өзгерту үшін қосымша опцияларды және/немесе дәлелдерді енгізуге болады.

26. Жолдардың, таңбалардың және сөздердің санынбасып шығару


Linux жүйесіндегі келесі awk пәрмені берілген енгізудегі жолдардың, таңбалардың және сөздердің санын басып шығарады. Ол осы операцияны орындау үшін NR айнымалысын, сондай-ақ кейбір негізгі арифметиканы пайдаланады.

$ echo "This is a input line..." | awk '{ w += NF; c += length + 1 } END { print NR, w, c }'

Ол енгізу жолында 1 жол, 5 сөз және дәл 24 таңба бар екенін көрсетеді.

27. Сөздердің жиілігін есептеңіз


Құжаттың сөз жиілігін есептеу үшін awk жүйесінде ассоциативті массивтер мен for циклін біріктіре аламыз. Келесі пәрмен сәл күрделі болып көрінуі мүмкін, бірақ негізгі құрылымдарды анық түсінгеннен кейін ол өте қарапайым.

$ awk 'BEGIN {FS="[^a-zA-Z]+" } { for (i=1; i<=NF; i++) words[tolower($i)]++ } END { for (i in words) print i, words[i] }' test.txt

Бір жолдық үзіндімен қиындық туындаса, келесі кодты жаңа файлға көшіріп, оны көзді пайдаланып іске қосыңыз.

$ cat > frequency.awk
BEGIN {
FS="[^a-zA-Z]+"
}
{
for (i=1; i<=NF; i++)
words[tolower($i)]++
}
END {
for (i in words)
print i, words[i]
}

Содан кейін оны -f опциясын пайдаланып іске қосыңыз.

$ awk -f frequency.awk test.txt

28. AWKпайдаланатын файлдардың атын өзгерту


awk пәрменін белгілі бір критерийлерге сәйкес келетін барлық файлдардың атын өзгерту үшін пайдалануға болады. Келесі пәрмен каталогтағы барлық .MP3 файлдарының атын .mp3 файлдарына өзгерту үшін awk пайдалану жолын көрсетеді.

$ touch {a,b,c,d,e}.MP3
$ ls *.MP3 | awk '{ printf("mv \"%s\" \"%s\"\n", $0, tolower($0)) }'
$ ls *.MP3 | awk '{ printf("mv \"%s\" \"%s\"\n", $0, tolower($0)) }' | sh

Біріншіден, біз .MP3 кеңейтімі бар кейбір демонстрациялық файлдарды жасадық. Екінші пәрмен пайдаланушыға атын өзгерту сәтті болған кезде не болатынын көрсетеді. Соңында, соңғы пәрмен Linux жүйесінде mv пәрмені арқылы атын өзгерту операциясын орындайды.

29. Санның квадрат түбірін басып шығару


AWK сандарды басқаруға арналған бірнеше кірістірілген функцияларды ұсынады. Олардың бірі sqrt() функциясы болып табылады. Бұл берілген санның квадрат түбірін қайтаратын C тәрізді функция. Мұның жалпы қалай жұмыс істейтінін көру үшін келесі мысалды жылдам қараңыз.

$ awk 'BEGIN{ print sqrt(36); print sqrt(0); print sqrt(-16) }'

Теріс санның квадрат түбірін анықтау мүмкін болмағандықтан, шығыс sqrt(-12) орнына 'nan' деп аталатын арнайы кілт сөзін көрсетеді.

30. Санның логарифмінбасып шығару


awk функциясы log() санның натурал логарифмін береді. Дегенмен, ол тек оң сандармен жұмыс істейді, сондықтан пайдаланушылардың енгізуін тексеруден хабардар болыңыз. Әйтпесе, біреу сіздің awk бағдарламаларыңызды бұзып, жүйелік ресурстарға артықшылықсыз қол жеткізуі мүмкін.

$ awk 'BEGIN{ print log(36); print log(0); print log(-16) }'

Сіз 36 логарифмін көріп, 0 логарифмінің шексіз екенін, ал теріс мән журналы «Сан емес» немесе nan екенін тексеруіңіз керек.

31. Санның экспоненциалын басып шығару


Экспоненциалды os a n саны e^n мәнін береді. Ол әдетте үлкен сандармен немесе күрделі арифметикалық логикамен айналысатын awk сценарийлерінде қолданылады. Біз кірістірілген awk функциясының exp() көмегімен санның экспоненциалын жасай аламыз.

$ awk 'BEGIN{ print exp(30); print log(0); print exp(-16) }'

Дегенмен, awk өте үлкен сандар үшін экспоненциалды есептей алмайды. Сіз C сияқты төмен деңгейлі бағдарламалау тілдерін пайдаланып осындай есептеулерді жасап, мәнді awk сценарийлеріңізге беруіңіз керек.

32. AWKпайдалану арқылы кездейсоқ сандарды жасаңыз


Кездейсоқ сандарды жасау үшін Linux жүйесінде awk пәрменін пайдалана аламыз. Бұл сандар 0-ден 1-ге дейінгі ауқымда болады, бірақ ешқашан 0 немесе 1 болмайды. Үлкенірек кездейсоқ мәнді алу үшін тіркелген мәнді нәтижелі санмен көбейтуге болады.

$ awk 'BEGIN{ print rand(); print rand()*99 }'

rand() функциясына ешқандай аргумент қажет емес. Сонымен қатар, бұл функция арқылы жасалған сандар дәл кездейсоқ емес, керісінше псевдокездейсоқ. Оның үстіне бұл сандарды жүгіруден жүгіруге дейін болжау өте оңай. Сондықтан сезімтал есептеулер үшін оларға сенбеу керек.

33. Түс компиляторының ескертулері қызыл түспен


Қазіргі заманғы Linux компиляторлары сіздің кодыңыз тіл стандарттарын сақтамаса немесе бағдарламаның орындалуын тоқтатпайтын қателер болса, ескертулер береді. Келесі awk пәрмені компилятор жасаған ескерту жолдарын қызыл түспен басып шығарады.

$ gcc -Wall main.c |& awk '/: warning:/{print "\x1B[01;31m" $0 "\x1B[m";next;}{print}'

Бұл пәрмен компилятордың ескертулерін нақты анықтағыңыз келсе пайдалы. Сіз бұл пәрменді gcc-тен басқа кез келген компилятормен пайдалана аласыз, нақты компиляторды көрсету үшін /: warning:/ үлгісін өзгерткеніңізге көз жеткізіңіз.

34. Файлдық жүйенің UUID ақпаратын басып шығарыңыз


UUID немесе әмбебап бірегей идентификатор - Linux файлдық жүйесі сияқты ресурстарды анықтау үшін пайдалануға болатын сан. Келесі Linux awk пәрменін пайдалану арқылы файлдық жүйеміздің UUID ақпаратын жай басып шығара аламыз.

$ awk '/UUID/ {print $0}' /etc/fstab

Бұл пәрмен awk үлгілерін пайдаланып /etc/fstab файлында UUID мәтінін іздейді. Ол бізді қызықтырмайтын файлдан түсініктеме береді. Төмендегі пәрмен UUID-тен басталатын жолдарды ғана алатынымызға көз жеткізеді.

$ awk '/^UUID/ {print $1}' /etc/fstab

Ол бірінші өріске шығуды шектейді. Сондықтан біз тек UUID нөмірлерін аламыз.

35. Linux ядросының кескін нұсқасыны басып шығарыңыз


Linux ядросының әртүрлі кескіндері әртүрлі Linux дистрибутивтерімен пайдаланылады. Біз жүйеміз awk қолдануға негізделген нақты ядро кескінін оңай басып шығара аламыз. Мұның жалпы қалай жұмыс істейтінін көру үшін келесі пәрменді тексеріңіз.

$ uname -a | awk '{print $3}'

Біз алдымен -a опциясымен uname пәрменін шығардық, содан кейін бұл деректерді awk жүйесіне жібердік. Содан кейін біз awk көмегімен ядро кескінінің нұсқа ақпаратын шығардық.

36. Жолдардың алдына жол нөмірлерін қосыңыз


Пайдаланушылар жол нөмірлері жоқ мәтіндік файлдарды жиі кездестіруі мүмкін. Бақытымызға орай, Linux жүйесіндегі awk пәрменін пайдаланып файлға жол нөмірлерін оңай қосуға болады. Оның нақты өмірде қалай жұмыс істейтінін көру үшін төмендегі мысалды мұқият қараңыз.

$ awk '{ print FNR ". " $0 ;next}{print}' test.txt

Жоғарыдағы пәрмен біздің test.txt анықтамалық файлындағы әрбір жолдың алдына жол нөмірін қосады. Бұл мәселені шешу үшін FNR орнатылған awk айнымалысын пайдаланады.

37. Мазмұнды сұрыптағаннан кейін файлды басып шығарыңыз


Біз сондай-ақ барлық жолдардың сұрыпталған тізімін басып шығару үшін awk пайдалана аламыз. Келесі пәрмендер біздің test.txt файлындағы барлық елдердің атын сұрыпталған ретпен басып шығарады.

$ awk -F ':' '{ print $1 }' test.txt | sort

Келесі пәрмен /etc/passwd файлындағы барлық пайдаланушылардың кіру атын басып шығарады.

$ awk -F ':' '{ print $1 }' /etc/passwd | sort

Сұрыптау пәрменін өзгерту арқылы сұрыптау ретін оңай өзгертуге болады.

38. Қолмен бетті басып шығарыңыз


Нұсқаулық бетте барлық қолжетімді опциялармен қатар awk пәрмені туралы толық ақпарат бар. Бұл awk командасын мұқият меңгергісі келетін адамдар үшін өте маңызды.

$ man awk

Егер сіз күрделі awk мүмкіндіктерін білгіңіз келсе, бұл сізге үлкен көмек болады. Мәселеге тап болған кезде осы құжаттаманы қараңыз.

39. Анықтама бетін басып шығарыңыз


Анықтама бетінде барлық ықтимал пәрмен жолы аргументтерінің жиынтық ақпараты бар. Келесі пәрмендердің бірін пайдаланып awk үшін анықтамалық нұсқаулықты шақыруға болады.

$ awk -h
$ awk --help

awk үшін барлық қолжетімді опцияларды жылдам шолуды қаласаңыз, осы бетті қараңыз.

40. Басып шығару нұсқасы туралы ақпарат


Нұсқа ақпараты бізге бағдарламалар құрастыру туралы ақпаратты береді. awk нұсқасы бетінде оның авторлық құқығы, құрастыру құралдары және т.б. сияқты ақпарат бар. Бұл ақпаратты келесі awk пәрмендерінің бірін пайдаланып көруге болады.

$ awk -V
$ awk --version

Соңғы ойлар


Linux жүйесіндегі awk пәрмені файлдарды өңдеуді және жүйеге техникалық қызмет көрсетуді қоса алғанда, барлық нәрселерді жасауға мүмкіндік береді. Ол күнделікті есептеу тапсырмаларын оңай орындауға арналған операциялардың алуан түрін қамтамасыз етеді. Біздің редакторлар бұл нұсқаулықты мәтінді өңдеу немесе басқару үшін пайдалануға болатын 40 пайдалы awk пәрменімен құрастырды. AWK толыққанды бағдарламалау тілі болғандықтан, бір жұмысты орындаудың бірнеше жолы бар. Сондықтан неге біз кейбір нәрселерді басқаша істеп жатырмыз деп ойламаңыз. Сіз әрқашан өзіңіздің дағдыларыңыз бен тәжірибеңізге негізделген өзіңіздің рецепттеріңізді таңдай аласыз. Сұрақтарыңыз болса, өз ойларыңызды қалдырыңыз.