CodeGym /Kurslar /Docker SELF /Verilərin `awk` istifadə edərək formatlaşdırılması

Verilərin `awk` istifadə edərək formatlaşdırılması

Docker SELF
Səviyyə , Dərs
Mövcuddur

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:

  1. cat /var/log/syslog — faylın məzmununu oxuyur.
  2. awk '{print $5}' — beşinci sütunu çıxarır (prosesin adı).
  3. sort — sətri əlifbaya görə sıralayır.
  4. uniq -c — unikal sətirlərin sayını hesablayır.
  5. sort -nr — sətirləri ədədi dəyərə görə azalan qaydada sıralayır.
  6. 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!

Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION