CodeGym /Kurslar /Docker SELF /Faylların çeşidlənməsi və filtrasiyası: `sort`, `uniq`, `...

Faylların çeşidlənməsi və filtrasiyası: `sort`, `uniq`, `cut` əmrləri

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

Faylların çeşidlənməsi və filtrasiyası: sort, uniq, cut əmrləri

1. sort komandası

sort komandası mətn faylındakı sətirləri çeşidləmək üçün istifadə olunur. Bu, adi mətndən tutmuş CSV-ə qədər hər hansı mətn formatında işləyə bilər. Standart olaraq, sətirləri əlifba sırasına görə çeşidləyir. Amma, sizə əsl möcüzələr yaratmağa icazə verəcək bir çox seçimlər mövcuddur.

Əsas sintaksis

sort [seçimlər] fayl

Sadə nümunə

Tutaq ki, bizdə names.txt adlı fayl və onun belə bir məzmunu var:

Charlie
Alice
Bob
David

Biz onu əlifba sırasına görə belə çeşidləyə bilərik:

sort names.txt

Nəticə:

Alice
Bob
Charlie
David

sort-un əsas seçimləri

Tərs sıraya görə çeşidləmə

Əgər sətirləri azalan sıraya görə çeşidləmək istəyirsinizsə, -r seçimini istifadə edin:

sort -r names.txt

Nəticə:

David
Charlie
Bob
Alice

Rəqəmsal çeşidləmə

Rəqəmlər üçün əlifba sırasına görə çeşidləmə düzgün işləməyə bilər. Məsələn, numbers.txt faylının belə məzmunu var:

10
2
5
1

Əlifba sırasına görə çeşidləmə bu nəticəni verəcək:

1
10
2
5

Amma -n seçimi (rəqəmsal çeşidləmə) ilə:

sort -n numbers.txt

Nəticə düzgün olacaq:

1
2
5
10

Boşluqlara qarşı həssaslıq

Bəzən sətirlər əvvəlində və ya sonunda boşluqlar ola bilər. sort-un çaşmaması üçün -b seçimi istifadə edin:

sort -b çirkli_fayl.txt

Nümunə

Tutaq ki, bizdə visits.log adlı veb sayt ziyarətçilərinin jurnal faylı var:

user2 15
user1 5
user3 30
user4 20

Biz istifadəçiləri ziyarət sayına görə (ikinci sütuna görə) çeşidləmək istəyirik. Bu belə edilir:

sort -k2 -n visits.log

Burada -k2 "çeşidləmə üçün ikinci sütunu istifadə et" deməkdir. Nəticə:

user1 5
user2 15
user4 20
user3 30

2. uniq komandası

uniq komandası fayldakı təkrarlanan sətrləri silir. Ancaq vacibdir ki, bunu yadda saxlayasız: bu komanda yalnız ardıcıl təkrarlamalara təsir edir. Yəni, əgər eyni sətrlər faylda müxtəlif yerlərdədirsə, əvvəlcə bunları çeşidləmək lazımdır.

Əsas sintaksis

uniq [variantlar] fayl

Sadə nümunə

Tutaq ki, bizdə colors.txt adlı fayl var:

red
green
green
blue
blue
blue
red

Biz sadəcə uniq komandası istifadə etsək:

uniq colors.txt

Nəticə belə olacaq:

red
green
blue
red

Qaçınılmaz təkrarlanmaları silmək

Əvvəlcə faylı çeşidləyirik:

sort colors.txt | uniq

Nəticə:

blue
green
red

uniq üçün əsas variantlar

Təkrarlanmaların sayılması

Əgər hər sətrin neçə dəfə təkrarlanması ilə maraqlanırsınızsa, -c variantından istifadə edin:

sort colors.txt | uniq -c

Nəticə:

   3 blue
   2 green
   2 red

Nümunə

access.log faylında IP adreslərinin siyahısı var:

192.168.0.1
192.168.0.2
192.168.0.1
192.168.0.3
192.168.0.1

Biz hansı IP-nin ən çox təkrarlandığını bilmək istəyirik:

sort access.log | uniq -c | sort -rn

Nəticə:

   3 192.168.0.1
   1 192.168.0.2
   1 192.168.0.3

3. cut komandası

cut komandası, məsələn, CSV faylında müəyyən sütunları və ya simvollar diapazonunu çıxartmağa imkan verir.

Əsas Sintaksis

cut [seçimlər] fayl

Sadə Nümunə

data.csv faylı:

Alice,25,Developer
Bob,30,Designer
Charlie,22,Manager

Yalnız adları çıxardaq (birinci sütun):

cut -d',' -f1 data.csv

Nəticə:

Alice
Bob
Charlie

Burada:

  • -d',' — ayırıcı (vergül).
  • -f1 — çıxarılacaq sahə (sütun).

cut üçün Əsas Seçimlər

Simvol diapazonunun seçilməsi

Əgər bizim data.csv faylı sabit genişliyə malik sütunlardan ibarətdirsə:

Alice      25 Developer
Bob        30 Designer
Charlie    22 Manager

Yalnız yaşları çıxara bilərik (12-dən 14-ə qədər simvollar):

cut -c12-14 data.csv

Nəticə:

25
30
22

Bir neçə sahənin seçilməsi

Əgər bizdə log.csv faylı varsa:

2023-01-01,INFO,Server started
2023-01-02,ERROR,Connection failed
2023-01-03,INFO,Server stopped

Yalnız tarix və log səviyyəsini çıxardaq (1 və 2 sahələr):

cut -d',' -f1,2 log.csv

Nəticə:

2023-01-01,INFO
2023-01-02,ERROR
2023-01-03,INFO

4. Praktik nümunə: sort, uniqcut əmrlərinin birləşdirilməsi

Belə bir məlumatları olan log-fayl götürək:

user1,192.168.0.1
user2,192.168.0.2
user1,192.168.0.1
user3,192.168.0.3
user2,192.168.0.2
  1. IP ünvanlarını çıxaraq:
cut -d',' -f2 log.txt
  1. Təkrarlananları silib onların sayını hesablayacağıq:
cut -d',' -f2 log.txt | sort | uniq -c
  1. Sıxlıq üzrə çeşidləyək:
cut -d',' -f2 log.txt | sort | uniq -c | sort -rn

Nəticə:

2 192.168.0.2
2 192.168.0.1
1 192.168.0.3
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION