sort, uniq, wc, cut, tr, xargs

~15 daq · Linux · Matn bilan ishlash

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] cut bitta belgili ajratuvchi bilan ishlaydi. Ustunlar bir nechta bo'shliq bilan ajratilgan bo'lsa (ps, ls -l chiqishi) — awk yaxshiroq (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] uniq faqat ketma-ket (yonma-yon) takrorlarni ko'radi. Shuning uchun deyarli har doim sort | uniq shaklida 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
  1. sort — bir xillarini yonma-yon
  2. uniq -c — sanash
  3. sort -rn — son bo'yicha, kattasi tepada
  4. head — 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 ajratish
  • sort — -n son, -h hajm, -r teskari, -u noyob, -t -k ustun bo'yicha
  • uniq -c — sanash; doimo sort | uniq
  • sort | uniq -c | sort -rn | head — "eng ko'p uchraydigan"
  • wc -l — qatorlar soni
  • tr — belgilarni almashtirish, -d o'chirish, -s siqish
  • column -t — chiroyli jadval
  • xargs — stdin → argumentlar; -I {}, -P, -0

Keyingi dars

16-dars: sed va awk — matnni o'zgartirish va ustunlar