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
, uniq
və cut
ə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
- IP ünvanlarını çıxaraq:
cut -d',' -f2 log.txt
- Təkrarlananları silib onların sayını hesablayacağıq:
cut -d',' -f2 log.txt | sort | uniq -c
- 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
GO TO FULL VERSION