AWK əmrləri və skript yazmaq necədir

Komutlar, sintaksis və nümunələr

Awk komutu mətn fayllarını, xüsusən də satırlar (satırlar) və sütunlar tərəfindən təşkil edilən məlumat fayllarını emal və ya analiz etmək üçün güclü bir üsuldur.

Sadə awk əmrləri komanda xəttindən keçirilə bilər. Daha kompleks vəzifələr bir faylya awk proqramları (awk scripts deyilən) kimi yazılmalıdır.

Bir awk komutunun əsas formatı aşağıdakı kimi görünür:

awk 'nümunəsi {action}' input-file> output-file

Bu, deməkdir: giriş faylının hər bir xəttini çəkmək; Xəttdə nümunə varsa hərəkətləri xəttə tətbiq edər və xətti çıxış faylına yazır. Nümunə atılsa, hərəkət bütün xəttlərə tətbiq edilir. Misal üçün:

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

Bu bəyanat hər bir xəttin 5-ci sütunu elementini alır və "output.txt" çıxış faylında bir xətt kimi yazır. '$ 4' dəyişən ikinci sütuna aiddir. Eyni şəkildə, birinci, ikinci və üçüncü sütuna 1 $, 2, 3 $ və s. Ilə daxil ola bilərsiniz. Sütunlara görə boşluqlar və ya sekmeler (ağ boşluq deyilir) ilə ayrılmalıdır. Belə ki, "table1.txt" giriş faylı bu xətləri ehtiva edirsə:

1, Justin Timberlake, Title 545, Qiymət $ 7.30 2, Taylor Swift, Title 723, Qiymət $ 7.90 3, Mick Jagger, Sərvət 610, Qiymət $ 7.90 4, Lady Gaga, Başlıq 118, Qiymət $ 7.30 5, Johnny Cash, Mövzu 482, Qiyməti 6.50 $ 6, Elvis Presley, Title 335, Qiymət $ 7.30 7, John Lennon, Başlıq 271, Qiymət $ 7.90 8, Michael Jackson, Mövzu 373, Qiymət $ 5.50

Sonra əmr "output1.txt" çıxış faylına aşağıdakı xətləri yazırdı:

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

Sütun ayırıcısı boşluqlar və ya nişanlar kimi başqa bir şey varsa, awq ifadəsində aşağıdakı kimi göstərə bilərsiniz:

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

Sütunların bir virgülle ayrılması düşünülürse, bu, hər satırın sütunundaki elementi seçəcəkdir. Buna görə də çıxış, bu vəziyyətdə olardı:

Title 545 Başlıq 723 Başlıq 610 Başlıq 118 Başlıq 482 Başlıq 335 Başlıq 271 Başlıq 373

Kıvırılan mötərizədə olan ifadələrin siyahısı ('{', '}') blok adlanır. Bir blokun qarşısında şərti ifadə qoyarsanız, blokun içindəki bəyanat yalnız şərt doğru olduqda həyata keçiriləcəkdir.

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

Bu halda vəziyyət $ 7 == "\ $ 7.30", yəni sütundakı element 7,30 dollara bərabərdir. Dəyişikliyin qarşısında terslik sistemi sistemin dəyişən kimi $ 7-ə şərh etməsini maneə törətmək üçün istifadə olunur və bunun əvəzinə dollar qeydini səciyyəvidir.

Beləliklə, bu awk ifadəsi 7-ci sütunda "7,30 dollar" olan hər bir xəttin üçüncü sütununda elementi yazır.

Vəziyyət kimi normal ifadələrdən də istifadə edə bilərsiniz. Misal üçün:

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

İki dilim arasındakı simli ('/') normal ifadəsidir. Bu halda, yalnız "30." simvoludur. Bu, bir satırda "30" simli varsa, sistem bu xəttin 3-cü sütununda elementi yazır. Yuxarıdakı nümunədə çıxdıq:

Timberlake, Gaga, Presley,

Cədvəl elementləri awk nömrələri olduqda bu nümunədə olduğu kimi onlara hesablamalar apara bilər:

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

Mövcud sıradakı elementlərə ($ 1, $ 2, və s.) Daxil olan dəyişənlərdən başqa, tam sıra (xətt) və dəyişən NF sahələri sayını tutan dəyişən $ 0 var.

Bu nümunədə olduğu kimi yeni dəyişənləri də təyin edə bilərsiniz:

awk '{sum = 0; (col = 1; col <= NF; col ++) sum + = $ col; çap məbləği; } '

Bu, hər bir sıra bütün elementlərinin məbləğini hesablayır və yazır.

Awk ifadələri tez-tez sed əmrləri ilə birləşir.