Verilərin awk
istifadə edərək formatlaşdırılması
1. awk
ilə tanışlıq
awk
— mətn məlumatlarını işləmək üçün güclü bir utilitdir. Əgər mətn faylını bir cədvəl kimi təsəvvür etsək, burada sətirlər — cədvəl sətirləri (açıq məsələdir), sütunlar isə boşluqlarla ayrılmış məlumatlardır, onda awk
bizim ən yaxşı dostumuz olur. O, sütun seçmək, sətirləri filtrasiya etmək, məlumatları formatlamaq və hətta arifmetik əməliyyatlar icra etmək üçün sizə kömək edəcək.
Adı müəlliflərinin — Alfred Aho, Peter Weinberger və Brian Kernighan (bəli, C dilinin yaradılmasında iştirak edən həmin Kernighan) adlarının baş hərflərindən gəlir.
awk
-n əsas konsepsiyası, şablonlar və hərəkətlərdən istifadə edərək məlumatları işləməkdir ki, bu da onu bir növ kiçik proqramlaşdırma dili kimi göstərir.
awk
-n Sintaksisi
Əsas komanda sintaksisi belə görünür:
awk 'şablon {əməliyyat}' fayl
şablon
— fayldakı hər bir sətir üçün yoxlanılan şərt.əməliyyat
— şablona uyğun gələn sətrlər üzərində yerinə yetirilən əməliyyatlar.- Əgər şablon yoxdursa, əməliyyat hər bir sətr üçün yerinə yetirilir.
Nümunə:
awk '{print $1}' data.txt
Bu komanda data.txt
faylının hər bir sətri üçün birinci sütunu ($1
) çap edəcək.
2. awk
-ın əsas imkanları
1. Sütunların seçilməsi
awk
-ın ən sadə istifadəsi – fayldan bir və ya bir neçə sütunu seçməkdir. Sahə $n
kimi işarələnir, burada n
sütunun nömrəsidir (1-dən başlayaraq).
Nümunə:
1-ci və 3-cü sütunları çıxarmaq:
awk '{print $1, $3}' data.txt
Güman edək ki, bizim data.txt
faylı belə görünür:
John 25 Engineer
Jane 30 Designer
Mike 28 Developer
Nəticə:
John Engineer
Jane Designer
Mike Developer
2. Şərtli sətir emalı
Şərtlər, müəyyən kriteriyalara cavab verən yalnız o sətirləri emal etməyə icazə verir.
Nümunə:
2-ci sütundakı dəyərin 27-dən böyük olduğu sətirləri çıxarmaq:
awk '$2 > 27 {print $1, $2}' data.txt
Nəticə:
Jane 30
Mike 28
3. Riyazi əməliyyatlar
awk
riyazi əməliyyatları yerinə yetirə bilir. Bu, yerində bir şey hesablamaq lazım olduqda faydalıdır.
Nümunə:
2-ci sütundakı dəyərə 10 əlavə etmək:
awk '{print $1, $2+10}' data.txt
Nəticə:
John 35
Jane 40
Mike 38
4. Sətirlərin sayını hesablamaq
awk
avtomatik olaraq emal edilmiş sətirlərin sayını bilir. Bu məlumat NR
(Number of Records) dəyişənində saxlanılır.
Nümunə:
Fayldakı sətir sayını hesablamaq:
awk 'END {print NR}' data.txt
Nəticə:
3
3. Genişləndirilmiş İmkanlar
1. Nəticənin Formatlanması
awk
funksiyası vasitəsilə güclü formatlaşdırılmış çıxışı dəstəkləyir printf
. Bu, C-dəki printf
funksiyasına oxşayır.
Nümunə:
Məlumatları düzləndirmək:
awk '{printf "%-10s %-5s %-10s\n", $1, $2, $3}' data.txt
Nəticə:
John 25 Engineer
Jane 30 Designer
Mike 28 Developer
2. Dəyişənlər
Dəyişənlərdən məlumatları saxlamaq və işləmək üçün istifadə edə bilərsiniz.
Nümunə:
İkinci sütunun cəmini hesablayın:
awk '{sum += $2} END {print "Ümumi Yaş:", sum}' data.txt
Nəticə:
Ümumi Yaş: 83
3. Müntəzəm İfadələr
awk
sətirləri tapmaq üçün müntəzəm ifadələri dəstəkləyir.
Nümunə:
Birinci sütunda J
hərfi olan sətirləri göstərmək:
awk '/J/ {print $0}' data.txt
Nəticə:
John 25 Engineer
Jane 30 Designer
4. Təcrübədə nümunə
1. Sistem jurnalının analizi
Tutaq ki, bizdə /var/log/syslog
adlı sistem log faylı var və hansı proseslərin daha çox qeyd edildiyini bilmək istəyirik.
Əmr:
cat /var/log/syslog | awk '{print $5}' | sort | uniq -c | sort -nr | head -10
Bu nə edir:
cat /var/log/syslog
— faylın məzmununu oxuyur.awk '{print $5}'
— beşinci sütunu çıxarır (prosesin adı).sort
— sətri əlifbaya görə sıralayır.uniq -c
— unikal sətirlərin sayını hesablayır.sort -nr
— sətirləri ədədi dəyərə görə azalan qaydada sıralayır.head -10
— ən üst 10 prosesi göstərir.
2. Maaş hesabatının hazırlanması
Bizdə salaries.txt
adlı fayl var:
John 25 4000
Jane 30 5000
Mike 28 4500
Tapşırıq:
Maaşları 10% artırıb yekun hesabatı göstərmək.
Həll:
awk '{new_salary = $3 * 1.1; printf "%-10s %-5s %-10.2f\n", $1, $2, new_salary}' salaries.txt
Nəticə:
John 25 4400.00
Jane 30 5500.00
Mike 28 4950.00
5. awk
ilə işləyərkən tez-tez rast gəlinən səhvlər
Ayırıcılarla bağlı problemlər
Standart olaraq awk
boşluqları və ya tabulyasiyanı ayırıcı kimi istifadə edir. Əgər məlumatlarınız başqa şeylərlə (məsələn, vergüllərlə və ya iki nöqtə ilə) ayrılıbsa, bunu -F
seçimi ilə göstərməlisiniz.
Nümunə:
data.csv
faylı:
John,25,Engineer
Jane,30,Designer
Mike,28,Developer
CSV ilə işləmək üçün komanda:
awk -F',' '{print $1, $3}' data.csv
Nəticə:
John Engineer
Jane Designer
Mike Developer
Formatın nizamsızlığı səbəbindən sahələrin keçilməsi
Bəzən sətrlərdə gözlənilməz boşluqlar və ya olmayan sütunlar ola bilər. Bu səhvlərə səbəb ola bilər. Həmişə çalışmaya başlamadan əvvəl məlumatları yoxlamaq faydalıdır.
Praktik tətbiq
İndicə siz awk
istifadə edərək sistem loglarını analiz etməyi, maaş məlumatlarını emal etməyi və hesabatlar yaratmağı öyrəndiniz. Bu bacarıqlar böyük verilən bazaları, CSV faylları və real layihələrdə jurnallarla işləmənizə kömək edəcək. Əgər DevOps-dasınızsa, sistem loglarının awk
ilə təhlili super gücünüz olacaq. Əgər developer’sinizsə, bu, verilənləri birbaşa terminaldan tez idarə etməyin mükəmməl yoludur.
awk
-ı daha dərindən öyrənmək üçün GNU Awk rəsmi sənədlərinə baxmağı tövsiyə edirəm. İndi artıq məlumatlarınızı daha idarə olunan edə biləcəyinizi bilirsiniz!
GO TO FULL VERSION