Skip to content

AWK Komutları ve Komut Dosyaları Nasıl Yazılır

12 de Nisan de 2021

Awk komutu, metin dosyalarını işlemek veya analiz etmek için güçlü bir yöntemdir. Özellikle satırlara (satırlara) ve sütunlara göre düzenlenmiş veri dosyalarını analiz eder. Basit awk komutları komut satırından çalıştırılabilir. Daha karmaşık görevler, bir dosyaya awk programları (awk betikleri olarak adlandırılır) olarak yazılmalıdır.

Hero Images / Getty Images

AWK Temelleri

Bir awk komutunun temel biçimi şuna benzer: awk ‘şablon {eylem}’ girdi dosyası> çıktı dosyası

Bunun anlamı: girdi dosyasının her satırını alın; satır desen içeriyorsa, eylemi satıra uygulayın ve ortaya çıkan satırı çıktı dosyasına yazın. Desen atlanırsa, eylem tüm satırlara uygulanır. Örneğin: awk ‘{print $ 5}’ table1.txt> output1.txt

Yukarıdaki ifade, her satırın 5. sütununun elemanını alır ve “output.txt” çıktı dosyasına bir satır olarak yazar. ‘$ 4’ değişkeni dördüncü sütunu ifade eder. Benzer şekilde, birinci, ikinci ve üçüncü sütuna $ 1, $ 2, $ 3, vb. İle erişebilirsiniz. Varsayılan olarak, sütunların boşluklarla veya sekmelerle (sözde beyaz boşluk) ayrıldığı varsayılır. Dolayısıyla, “tablo1.txt” girdi dosyası şu satırları içeriyorsa: 1, Justin Timberlake, Başlık 545, Fiyat 7,30 $
2, Taylor Swift, Başlık 723, Fiyat 7,90 $
3, Mick Jagger, Başlık 610, Fiyat 7,90 $
4, Lady Gaga, Başlık 118, Fiyat 7,30 $
5, Johnny Cash, Başlık 482, Fiyat 6,50 $
6, Elvis Presley, Başlık 335, Fiyat 7,30 Dolar
7, John Lennon, Başlık 271, Fiyat 7,90 $
8, Michael Jackson, Başlık 373, Fiyat 5,50 $

Daha sonra komut şu satırları “output1.txt” çıktı dosyasına yazar: 545,
723,
610,
118,
482,
335,
271,
373,

Sütun ayırıcı, virgül gibi boşluklar veya sekmelerden başka bir şeyse, bunu awk ifadesinde şu şekilde belirtebilirsiniz: awk -F, ‘{print $ 3}’ table1.txt> output1.txt

Bu, sütunların virgülle ayrıldığı düşünülürse, her satırın 3. sütunundan öğeyi seçecektir. Bu nedenle, bu durumda çıktı şöyle olacaktır: Başlık 545
Başlık 723
Başlık 610
Başlık 118
Başlık 482
Başlık 335
Başlık 271
Başlık 373

AWK’da Koşullu İfadeler

Küme parantezleri (‘{‘, ‘}’) içindeki ifadelerin listesine blok adı verilir. Bir bloğun önüne bir koşullu ifade koyarsanız, bloğun içindeki ifade yalnızca koşul doğruysa yürütülecektir. awk ‘$ 7 == ” $ 7,30″ {yazdır $ 3}’ table1.txt

Bu durumda, koşul $ 7 == ” $ 7,30″ şeklindedir, bu da 7. sütundaki öğenin 7,30 $ ‘a eşit olduğu anlamına gelir. Dolar işaretinin önündeki ters eğik çizgi, sistemin 7 doları bir değişken olarak yorumlamasını önlemek ve bunun yerine dolar işaretini tam anlamıyla almak için kullanılır. Dolayısıyla bu awk ifadesi, her satırın 3. sütununda 7. sütununda “7,30 $” bulunan öğeyi yazdırır. Ayrıca koşul olarak normal ifadeleri de kullanabilirsiniz. Örneğin: awk ‘/ 30 / {print $ 3}’ table1.txt

İki eğik çizgi arasındaki dize (“https://www.lifewire.com/”) normal ifadedir. Bu durumda, yalnızca “30” dizesidir. Bu, bir satırın “30” dizesini içermesi durumunda, sistemin öğeyi o satırın 3. sütununda yazdırdığı anlamına gelir. Yukarıdaki örnekteki çıktı şöyle olacaktır: Timberlake,
Gaga,
Presley,

AWK’da Hesaplamaları Gerçekleştirin

Tablo öğeleri sayı ise, awk bu örnekte olduğu gibi bunlar üzerinde hesaplamalar çalıştırabilir: awk ‘{print ($ 2 * $ 3) + $ 7}’

Geçerli satırın öğelerine ($ 1, $ 2, vb.) Erişen değişkenlerin yanı sıra, tüm satırı (satır) ifade eden $ 0 değişkeni ve alanların sayısını tutan NF değişkeni vardır. Ayrıca bu örnekte olduğu gibi yeni değişkenler de tanımlayabilirsiniz: awk ‘{sum = 0; için (col = 1; col <= NF; col ++) toplamı + = $ sütun; baskı toplamı; } '

Bu, her satırın tüm öğelerinin toplamını hesaplar ve yazdırır. Awk ifadeleri sıklıkla sed komutlarıyla birleştirilir.