AWK buyruqlari va skriptlarini qanday yozish mumkin

Buyruqlar, sintaksis va misollar

Awk buyrug'i matnli fayllarni ishlash va tahlil qilish uchun, ayniqsa, satrlar (satrlar) va ustunlar yordamida tashkil etilgan ma'lumotlar fayllari uchun kuchli usuldir.

Oddiy awk buyruqlari buyruq satridan ishga tushirilishi mumkin. Yana murakkab vazifalar faylga awk dasturlari (awk skriptlari deb ataladi) sifatida yozilishi kerak.

Awk komandasining asosiy formati quyidagicha ko'rinadi:

awk 'naqsh {action}' input-file> output-fayli

Bu degani: kirish faylining har bir satrini oling; Agar chiziqda naqsh mavjud bo'lsa, harakatni chiziqqa yozib chiqing va natijada chiqadigan faylni chiqdi-faylga yozing. Agar naqsh bo'lmasa, ish barcha satrlarga qo'llaniladi. Masalan:

awk '{$ 5 print} table1.txt> output1.txt

Ushbu so'z har bir satrning 5-ustunining elementini oladi va uni "output.txt" chiqdi fayliga bir satr sifatida yozadi. '$ 4' o'zgaruvchisi ikkinchi ustunga ishora qiladi. Xuddi shunday, siz birinchi, ikkinchi va uchinchi ustunga $ 1, $ 2, $ 3, va hokazo kirishingiz mumkin. Odatiy ustunlar bo'shliqlar yoki yorliqlar (oq bo'shliq deyiladi) bilan ajratilgan deb hisoblanadi. Shunday qilib, "table1.txt" kirish fayli ushbu satrlarni o'z ichiga oladi:

1, Justin Timberlake, Sarlavha 545, narx $ 7.30 2, Teylor Svift, Title 723, narx $ 7.90 3, Mick Jagger, Sarlavha 610, Narxlar $ 7.90 4, Lady Gaga, Sarlavha 118, Narxlari $ 7.30 5, Johnny Cash, Sarlavha 482, Narxlari $ 6.50 6, Elvis Presli, sarlavha 335, narxi $ 7.30 7, Jon Lennon, sarlavha 271, narx $ 7.90 8, Maykl Jekson, sarlavha 373, narx $ 5.50

Keyin buyruqlar "output1.txt" chiqdi fayliga quyidagi satrlarni yozadi:

545, 723, 610, 118, 482, 335, 271, 373,

Agar ustun ajratuvchi bo'shliqlar yoki tablar kabi boshqa narsalar bo'lsa, u holda awk iborasini quyidagicha belgilang:

awk -F, '{print $ 3}' table1.txt> output1.txt

Agar ustunlar vergul bilan ajratilgan deb hisoblansa, bu har bir satrning 3 ustunidan elementni tanlaydi. Shuning uchun chiqim, bu holda shunday bo'ladi:

Sarlavha 545 Sarlavha 723 Sarlavha 610 Sarlavha 118 Sarlavha 482 Sarlavha 335 Sarlavha 271 Sarlavha 373

Jingalak qavslar ichidagi so'zlar ro'yxati ('{', '}') blok deb ataladi. Agar blok oldida shartli ifodani kiritadigan bo'lsak, blok ichidagi jumlaga faqat shart to'g'ri bo'lsa bajariladi.

awk '$ 7 == "\ $ 7.30" {print $ 3} "table1.txt

Bunday holda $ 7 == "$ 7,30" dir, ya'ni 7 ustunidagi element $ 7.30 ga teng. Dollar belgisi oldidagi teskari egri chiziqli tizim tizimni $ 7 o'zgaruvchiga aylantirmaslik uchun ishlatiladi va buning o'rniga dollar belgisini so'zma-so'z qabul qilish kerak.

Shunday qilib, bu awk iborasi 7-ustunda "$ 7.30" bo'lgan har bir satrning 3-ustunidagi elementni chiqaradi.

Siz shuningdek oddiy shartlarni shart sifatida ishlatishingiz mumkin. Masalan:

awk '/ 30 / {print $ 3}' table1.txt

Ikkala tirnoq ('/') o'rtasidagi mag'lubiyat muntazam ifodadir. Bu holda, bu faqat "30." qatori. Agar chiziq "30" satrini o'z ichiga olgan bo'lsa, tizim ushbu liniyaning 3-ustunidagi elementni chiqaradi. Yuqoridagi misoldagi chiqim shunday bo'ladi:

Timberlake, Gaga, Presli,

Jadval elementlari awk raqamlari bo'lsa, bu misolda ko'rsatilganidek, ularni hisoblashni bajarishi mumkin:

awk '{print ($ 2 * $ 3) + $ 7}

Joriy satr elementlariga ($ 1, $ 2, va hokazo) ega bo'lgan parametrlarga qo'shimcha ravishda, $ 0 o'zgaruvchan qator (satr) va maydonlarning soniga mos keladigan NF o'zgaruvchisi mavjud.

Ushbu misolda bo'lgani kabi, yangi o'zgaruvchilar ham belgilashingiz mumkin:

awk '{sum = 0; uchun (col = 1; col <= NF; col ++) sum + = $ col; nashr summasi; }

Bu har bir satrning barcha elementlarini yig'adi va yozadi.

Awk so'zlari tez-tez sed buyruqlar bilan birlashtiriladi.