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

Komutlar, sözdizimi ve örnekler

Awk komutu, metin dosyalarını (özellikle satırlar (satırlar) ve sütunlar tarafından organize edilen veri dosyalarını işlemek veya analiz etmek için güçlü bir yöntemdir.

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.

Awk komutunun temel biçimi şuna benzer:

awk 'pattern {action}' giriş dosyası> çıktı dosyası

Bu şu anlama gelir: giriş dosyasının her bir satırını al; çizgi kalıbı içeriyorsa eylemi çizgiye uygulayın ve sonuçta oluşan satırı çıktı dosyasına yazın. Desen atlanırsa, eylem tüm satıra uygulanır. Örneğin:

awk '{print $ 5}' table1.txt> çıktı1.txt

Bu ifade, her satırın 5. sütununu alır ve "output.txt" çıktı dosyasında bir satır olarak yazar. '$ 4' değişkeni ikinci sütuna işaret eder. Benzer şekilde, birinci, ikinci ve üçüncü sütunlara $ 1, $ 2, $ 3 vb. Ile erişebilirsiniz. Varsayılan olarak, sütunların boşluklarla veya sekmelerle (beyaz boşluk olarak adlandırılır) ayrıldığı varsayılır. Yani, "table1.txt" giriş 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 Nakit, Başlık 482, Fiyat $ 6.50 6, Elvis Presley, Başlık 335, Fiyat $ 7.30 7, John Lennon, Başlık 271, Fiyat $ 7.90 8, Michael Jackson, Başlık 373, Fiyat $ 5.50

Daha sonra komut, "output1.txt" çıktı dosyasına şu satırları yazacaktır:

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

Sütun ayırıcı boşluk veya sekme gibi bir virgül gibi bir şey ise, awk deyiminde aşağıdaki gibi belirtin:

awk -F, '{print $ 3}' table1.txt> çıktı1.txt

Sütunların virgülle ayrıldığı düşünüldüğünde, bu, her satırın 3. sütunundaki öğeyi seçer. Bu nedenle çıktı, bu durumda şöyle olurdu:

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

Kıvrımlı parantez içindeki ifadelerin listesi ('{', '}') bir blok olarak adlandırılır. Bir bloğun önüne koşullu bir ifade koyarsanız, bloğun içindeki ifade yalnızca koşul doğruysa yürütülür.

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

Bu durumda, durum 7 == "\ $ 7.30" şeklindedir, yani 7 sütundaki öğe 7,30 dolara eşittir. Dolar işareti önünde ters eğik çizgi, sistemin 7 $ değerini değişken olarak yorumlamasını ve bunun yerine dolar işaretini tam anlamıyla almasını engellemek için kullanılır.

Yani bu awk ifadesi, 7. satırda "7.30 $" olan her satırın 3. sütunundaki öğeyi yazdırır.

Normal ifadeleri de koşul olarak kullanabilirsiniz. Örneğin:

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

İki eğik çizgi ('/') arasındaki dize normal ifadedir. Bu durumda, sadece "30" dir. Bu, bir satır "30" dizesini içeriyorsa, sistem bu satırın 3. sütunundaki öğeyi yazdırır. Yukarıdaki örnekte çıktı şöyle olurdu:

Timberlake, Gaga, Presley.

Tablo öğeleri, awk ise, bu örnekte olduğu gibi onlarda hesaplamalar yapabilir:

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

Geçerli satırın ($ 1, $ 2, vb.) Öğelerine erişen değişkenlerin yanı sıra, tam satıra (satır) karşılık gelen $ 0 değişken ve alan sayısını tutan NF değişkenidir.

Bu örnekte olduğu gibi yeni değişkenleri de tanımlayabilirsiniz:

awk '{sum = 0; için (col = 1; col <= NF; col ++) sum + = $ col; 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.