sort, uniq, wc, cut, tr, xargs
Muammodan boshlaylik
13-darsning boshidagi buyruqni eslang:
cut -d' ' -f1 access.log | sort | uniq -c | sort -rn | head -5
Hozir grep va pipe ni bilasiz. Bu darsda zanjirning qolgan "g'ishtlari" — cut, sort, uniq va boshqalar. Ular birgalikda terminalni kichik "Excel" ga aylantiradi: ustun ajratish, saralash, guruhlash, sanash.
Mashq uchun fayl:
cat > sotuvlar.csv << EOF
sana,shahar,mahsulot,soni
2026-11-01,Toshkent,noutbuk,3
2026-11-01,Samarqand,telefon,5
2026-11-02,Toshkent,telefon,2
2026-11-02,Buxoro,noutbuk,1
2026-11-03,Toshkent,noutbuk,4
2026-11-03,Samarqand,telefon,2
EOF
cut — ustunlarni ajratish
cut -d',' -f2 sotuvlar.csv
shahar
Toshkent
Samarqand
Toshkent
Buxoro
Toshkent
Samarqand
-d','— ajratuvchi (delimiter)-f2— 2-ustun (field)
cut -d',' -f2,3 sotuvlar.csv # 2 va 3-ustunlar
cut -d',' -f2- sotuvlar.csv # 2-dan oxirigacha
cut -d: -f1 /etc/passwd # foydalanuvchi nomlari
cut -c1-10 app.log # har qatorning birinchi 10 belgisi
[!INFO]
cutbitta belgili ajratuvchi bilan ishlaydi. Ustunlar bir nechta bo'shliq bilan ajratilgan bo'lsa (ps,ls -lchiqishi) —awkyaxshiroq (16-dars).
sort — saralash
sort ismlar.txt # alifbo bo'yicha
sort -r ismlar.txt # teskari
sort -n raqamlar.txt # son sifatida (10 > 9)
sort -h hajmlar.txt # "inson" hajmlari: 2K < 1M < 1G
sort -u ismlar.txt # takrorlarsiz
-n muhim:
sort: 1, 10, 2, 20, 3 ← matn sifatida
sort -n: 1, 2, 3, 10, 20 ← son sifatida
Ustun bo'yicha:
sort -t',' -k4 -n sotuvlar.csv # 4-ustun (soni) bo'yicha
sort -t',' -k2,2 -k4,4nr sotuvlar.csv # shahar, keyin soni kamayish tartibida
-t','— ajratuvchi-k4— 4-ustun bo'yicha
du -sh * | sort -h # papkalar hajm bo'yicha
ls -l | sort -k5 -n # fayllar hajm bo'yicha
uniq — takrorlarni guruhlash
uniq fayl.txt # ketma-ket takrorlarni olib tashlash
uniq -c fayl.txt # har biri necha marta
uniq -d fayl.txt # faqat takrorlanganlari
[!WARNING]
uniqfaqat ketma-ket (yonma-yon) takrorlarni ko'radi. Shuning uchun deyarli har doimsort | uniqshaklida ishlatiladi.
cut -d',' -f2 sotuvlar.csv | tail -n +2 | sort | uniq -c
1 Buxoro
2 Samarqand
3 Toshkent
tail -n +2 — sarlavha qatorini tashlab yuborish.
Mashhur zanjir: "eng ko'p uchraydigan"
... | sort | uniq -c | sort -rn | head
sort— bir xillarini yonma-yonuniq -c— sanashsort -rn— son bo'yicha, kattasi tepadahead— top 10
Bu zanjirni yod oling — u yuzlab vaziyatda ishlaydi:
# Eng ko'p so'rov yuborgan IP lar
cut -d' ' -f1 access.log | sort | uniq -c | sort -rn | head
# Eng ko'p ochilgan sahifalar
cut -d'"' -f2 access.log | cut -d' ' -f2 | sort | uniq -c | sort -rn | head
# Eng ko'p ishlatgan buyruqlaringiz
history | awk '{print $2}' | sort | uniq -c | sort -rn | head
wc — sanash
wc -l fayl.txt # qatorlar
wc -w fayl.txt # so'zlar
wc -c fayl.txt # baytlar
ls | wc -l # papkadagi fayllar soni
grep -c ERROR app.log # grep ning o'zi ham sanaydi
tr — belgilarni almashtirish
echo "salom dunyo" | tr 'a-z' 'A-Z' # SALOM DUNYO
echo "a,b,c" | tr ',' '\n' # har biri yangi qatorda
echo "ko'p bo'shliq" | tr -s ' ' # takroriy bo'shliqlarni bittaga
cat windows.txt | tr -d '\r' > unix.txt # Windows \r belgilarini o'chirish
echo "tel: +998 90 123-45-67" | tr -cd '0-9' # faqat raqamlar: 998901234567
-d— o'chirish-s— takrorlarni siqish-c— teskari to'plam
paste, column — ko'rinish
cat sotuvlar.csv | column -t -s','
sana shahar mahsulot soni
2026-11-01 Toshkent noutbuk 3
2026-11-01 Samarqand telefon 5
...
CSV ni o'qiladigan jadvalga aylantiradi.
xargs — chiqishni argumentga aylantirish
Ba'zi buyruqlar stdin ni o'qimaydi — ular argument kutadi (rm, mkdir, chmod). Masalan:
find . -name "*.tmp" | rm # ❌ rm stdin ni o'qimaydi
xargs stdin dagi qatorlarni argumentlarga aylantiradi:
find . -name "*.tmp" | xargs rm
find chiqishi: a.tmp b.tmp c.tmp
xargs bajaradi: rm a.tmp b.tmp c.tmp
cat paketlar.txt | xargs sudo apt install -y
grep -rl "eski_nom" src/ | xargs sed -i 's/eski_nom/yangi_nom/g'
echo "a b c" | xargs mkdir
Har bir element uchun alohida va joyini belgilab — -I {}:
cat serverlar.txt | xargs -I {} ssh {} "uptime"
ls *.png | xargs -I {} cp {} zaxira/{}
Parallel — -P:
cat urls.txt | xargs -P 4 -I {} curl -sO {} # 4 ta bir vaqtda
Bo'shliqli nomlar
find . -name "*.tmp" -print0 | xargs -0 rm
-print0 va -0 — nomlarni yangi qator emas, nol belgi bilan ajratadi. Bo'shliqli fayl nomlari bo'lsa — majburiy.
Hammasi birga
Har bir shahar bo'yicha jami sotilgan mahsulotlar:
tail -n +2 sotuvlar.csv | cut -d',' -f2,4 | sort
Bu yerda yig'indini hisoblash uchun awk kerak — keyingi dars. cut/sort/uniq — sanash uchun; hisoblash uchun — awk.
Nima uchun shunday?
Nima uchun uniq faqat ketma-ket takrorlarni ko'radi — bu noqulay emasmi?
Bu — samaradorlik uchun ataylab qilingan tanlov. Ketma-ket takrorlarni topish uchun uniq faqat oldingi qatorni eslab qolishi kerak — xotira sarfi deyarli nol, fayl hajmi qanchalik katta bo'lmasin. Barcha takrorlarni topish uchun esa barcha ko'rilgan qatorlarni eslab qolish kerak — 10 GB log uchun bu 10 GB xotira. sort esa katta fayllarni diskdagi vaqtinchalik fayllar yordamida saralay oladi. Shunday qilib, sort | uniq — har biri o'z ishini optimal qiladigan ikki vosita, birgalikda esa istalgan hajmdagi ma'lumot bilan ishlaydi.
Xulosa
Eslab qoling:
cut -d',' -f2— ustun ajratishsort—-nson,-hhajm,-rteskari,-unoyob,-t -kustun bo'yichauniq -c— sanash; doimosort | uniqsort | uniq -c | sort -rn | head— "eng ko'p uchraydigan"wc -l— qatorlar sonitr— belgilarni almashtirish,-do'chirish,-ssiqishcolumn -t— chiroyli jadvalxargs— stdin → argumentlar;-I {},-P,-0
Keyingi dars
16-dars: sed va awk — matnni o'zgartirish va ustunlar