close

AWK

Navigasyona git Aramaya git
AWK
The-AWK-Programming-Language.svg
Awk-example.png
Alfred Aho , Brian Kernighan ve Peter J. Weinberger
bell laboratuvarları
Genel bilgi
paradigma Olay Odaklı Programlama , Zorunlu Programlama
Ortaya çıkan 1977, son revizyon 1985, mevcut POSIX versiyonu IEEE Std 1003.1-2004
Tarafından dizayn edilmiştir Alfred A ho , Peter Weinberger ve Brian Kernighan _ _
tip sistemi zayıf, dinamik
uygulamalar awk, GNU Awk, mawk, nawk, MKS AWK, Thompson AWK (derleyici), Awka (derleyici)
lehçeler eski awk oawk 1977, yeni awk nawk 1985, GNU Awk
tarafından etkilenmiş C , Bourne kabuğu , SNOBOL
etkiledi Perl , Korn kabuğu ( ksh93 , dtksh , tksh ), JavaScript
İşletim sistemi Çoklu platform

AWK , ister dosyalar ister veri akışları olsun, metin tabanlı verileri işlemek için tasarlanmış bir programlama dilidir . AWK adı , yazarlarının soyadının baş harflerinden türemiştir : Alfred Aho , Peter Weinberger ve Brian Kernighan . awk , tamamı küçük harfle yazıldığında, AWK programlama dilinde yazılmış programları yorumlayan Unix veya Plan 9 programını ifade eder .

AWK , ilişkisel liste veri türünü (yani, anahtar dizeleri tarafından dizine eklenen listeler) ve normal ifadeleri kapsamlı bir şekilde kullanan bir programlama dili örneğidir . AWK programlarının ve sed betiklerinin gücü, kısalığı ve sınırlamaları, Larry Wall'a Perl yazması için ilham verdi . Yoğun notasyonları nedeniyle bu dillerin tümü tek satırlık programlar yazmak için sıklıkla kullanılır .

AWK, Unix'te (sürüm 3'te) görünen ilk araçlardan biriydi ve Unix borularına işlevsellik eklemenin bir yolu olarak popülerlik kazandı . AWK dilinin bazı sürümlerinin uygulanması, hemen hemen her modern Unix benzeri işletim sisteminde standarttır. AWK, Tek UNIX Spesifikasyonunda her Unix işletim sisteminin gerekli yardımcı programlarından biri olarak listelenmiştir . AWK uygulamaları hemen hemen tüm diğer işletim sistemlerine kurulabilir.

AWK programlarının yapısı

POSIX awk.pdf

Genel olarak konuşursak, AWK'ya iki parça veri verilir: bir komut dosyası ve bir birincil girdi dosyası. Bir komut dosyası (gerçek bir dosya olabilir veya AWK komut satırı çağrısına dahil edilebilir ), AWK'ya girdi dosyasının nasıl işleneceğini söyleyen bir dizi komut içerir. Birincil girdi dosyası normalde bir şekilde metin biçiminde biçimlendirilir; gerçek bir dosyada olabilir veya standart girdiden (klavye) AWK tarafından okunabilir. Tipik bir AWK programı, her biri aşağıdaki biçimde olan bir dizi satırdan oluşur:

/ desen /{ eylem }

burada kalıp bir normal ifadedir ve eylem bir komuttur. Çoğu AWK uygulaması , varsayılan olarak genişletilmiş normal ifadeler kullanır . AWK girdi dosyasına bakar; "kalıp" ile eşleşen bir satır bulduğunda, "eylem" de belirtilen komutları yürütür. Alternatif formlar şunları içerir:

BAŞLA { eylem }
Veriler işlenmeye başlamadan önce , yürütmenin başlangıcında eylem komutlarını yürütün.
SON { eylem }
Önceki forma benzer, ancak tüm veriler işlendikten sonra eylem komutlarını yürütün.
/ desen /
Çizgileri desene göre yazdırın .
{ eylem }
Girişteki her satır için eylemi yürütün .

Bu şekillerin her biri bir dosyaya birden çok kez dahil edilebilir. Dosya aşamalı olarak işlenir, bu nedenle iki "BEGIN" ifadesi varsa, içerikleri görünüm sırasına göre yürütülür. "BEGIN" ve "END" ifadelerinin sıralı olması gerekmez .

AWK, metin analizi yöntemleri için C ile yazılmış algoritmaların yerine oluşturulmuştur .

AWK komutları

AWK komutları, yukarıdaki örneklerde eylem yerine geçen ifadelerdir . AWK komutları, işlev çağrılarını, değişken atamalarını, hesaplamaları veya bunların herhangi bir kombinasyonunu içerebilir. AWK, birçok işlev için kendi desteğini içerir; diğerleri AWK'nın farklı sürümleri tarafından sağlanır. Hatta bazı sürümler, daha da fazla işlevsellik sağlayabilen dinamik olarak bağlantılı kitaplıkların dahil edilmesini destekler.

Anlaşılır olması için aşağıdaki örneklerde parantezler ( { } ) kullanılmayacaktır.

Yazdır [

Yazdır komutu , metni yazdırmak için kullanılır. Bu komutun en basit şekli

Yazdır

Bu, şu anda işlenen satırın içeriğini gösterir. AWK'da çizgiler alanlara bölünmüştür ve bunlar ayrı ayrı çalıştırılabilir:

1$ yazdır
Geçerli satırın ilk alanını gösterir
1 $, 3 $ yazdır
Geçerli satırın, önceden tanımlanmış bir dize, çıkış alanı ayırıcısı veya varsayılan olarak bir boşluk karakterine (' ') atanan OFS ile ayrılmış birinci ve üçüncü alanlarını döndürür .

Bu sözdizimi ( $# ) değişken olduklarını düşündürse de ($ sembolü diğer dillerdeki değişkenleri gösterir), geçerli satırın alanlarına atıfta bulunurlar. Özel bir durum, $0 , tüm satırı ifade eder. Aslında, komutlar printve print $0benzer olduğu ortaya çıkıyor.

Print komutu ayrıca şu ad verilen hesaplamaların veya işlevlerin sonucunu da yazdırabilir:

 3 + 2 
yazdır foobar ( 3 ) print foobar ( değişken ) print sin ( 3 - 2 ) _ 
  
 

Çıktı bir dosyaya gönderilebilir:

 "ifade"  >  "dosya adı" yazdır

Değişkenler

Değişken adları, dil anahtar sözcükleri dışında [A-Za-z0-9_] karakterlerinin herhangi bir kombinasyonunu kullanabilir. + - * / operatörleri sırasıyla toplama, çıkarma, çarpma ve bölmedir. Birleştirme için, isteğe bağlı olarak aralarında bir boşluk bırakarak iki değişkeni (veya dize sabitlerini) yan yana yerleştirmeniz yeterlidir. Dizeler çift tırnak ile sınırlandırılır. Komutları noktalı virgülle bitirmek gerekli değildir . Program yorumları , bir satırdaki ilk karakter olarak # kullanılarak eklenebilir .

Kullanıcı tanımlı işlevler

C'ye benzer şekilde , fonksiyon tanımı key function, fonksiyon ismi, fonksiyon argümanları ve fonksiyon gövdesinden oluşur, örneğin:

işlev :

 function  add_ Three  ( sayı ,  geçici )  { # Tanımlayıcılar ñ     geçici = sayı + 3 # harfini içermezler, 
   aksan işaretleri de geçici olarak döndürülemezler }                           
    
 

Fonksiyonu şöyle çağırabiliriz:

print add_ three(36) # Baskılar 39

Fonksiyonlar yerel olarak tanımlanmış değişkenlere sahip olabilir. Bunların isimleri argüman listesinin sonuna eklenir, ancak fonksiyon çağrılırken bunların değerleri atlanmalıdır. Parametrelerin nerede bittiğini ve yerel değişkenlerin nerede başladığını belirtmek için bağımsız değişken listesinde yerel değişkenleri girintilemek uygundur.

Örnekler

Merhaba Dünya

Bu, AWK'da yazılmış çok basit bir Hello World programıdır:

 BEGIN  {  print  "Merhaba dünya!" ;  çıkış  }

80 karakterden uzun satırları yazdır

80'den fazla karakter içeren tüm satırları yazdırın. Varsayılan eylemin geçerli satırı yazdırmak olduğunu unutmayın.

 uzunluk  >  80

Kelime sayacı

Girişteki sözcükleri sayar ve satır, sözcük ve karakter sayısını görüntüler.

 {  w  +=  NF ;  c  +=  uzunluk } 
 END  {  yazdır  NR ,  w ,  c  }

İlk sütun toplamı

Girilen verilerin ilk sütununun değerlerini ekler.

 {  s  +=  $ 1  } 
 SON  {  print  s  }

Kelime sıklığı

Bu program, her kelimenin metinde kaç kez göründüğünü belirlemek için bağlantılı listeler kullanır.

 BEGIN  {  FS = "[^a-zA-Z]+" }
 
 {  for  ( i = 1 ;  i <= NF ;  i ++ ) 
      kelimeler [ tolower ( $ i )] ++ 
 }
 
 END  {  için  ( kelimelerde i  ) print i ,  kelimeler [ i ] } _
       
 

Bağımsız programlar

Diğer programlama dilleri gibi, bağımsız AWK programları da Shebang satır sözdizimi kullanılarak yazılabilir .

Örneğin, "Merhaba dünya!" metnini yazdıran merhabaworld.awk adlı bir UNIX betiği. aşağıdaki gibi yazılabilir:

 #!/usr/bin/awk -f 
 BEGIN  {  "Merhaba dünya!" yazdır  ; çıkış }  

AWK, sürümler ve uygulamalar

AWK ilk olarak 1977'de UNIX ile yazılmıştır .

1985'te yazarlar, kullanıcı tanımlı işlevler ekleyerek dili genişletmeye başladılar . Dil, 1988'de yayınlanan AWK Programlama Dili kitabında açıklanmıştır . Uyumsuz olduğu önceki sürümle karışıklığı önlemek için, bu sürüm bazen "yeni AWK" veya "nawk" olarak adlandırılır. Bu uygulama 1996 yılında bir özgür yazılım lisansı altında yayınlandı ve Brian Wilson Kernighan tarafından sürdürülmeye devam ediyor .

GNU awk veya gawk başka bir ücretsiz uygulamadır. Orijinal uygulama yayınlanmadan önce yazılmıştır ve yaygın olarak kullanılmaktadır. Hemen hemen her Linux dağıtımı , gawk'ın güncellenmiş bir sürümünü içerir ve gawk , Linux dünyasında standart uygulama olarak kabul edilir . GAWK sürüm 30 , FreeBSD sürüm 5.0'a awk olarak dahil edildi . BSD'nin sonraki sürümleri , GPL lisansı altında yayınlanan bir programın tescilli olmak için değiştirilemeyeceği ve böylece kaynak kodu özgürlüğünü koruyacağı anlamında BSD'den daha kısıtlayıcı bir özgür yazılım lisansı olan GPL'nin kullanımını önlemek için nawk'ı içeriyordu.

gawk tabanlı ücretsiz bir projenin sayfası . Bu, dinamik kitaplıkları kullanmanıza izin vermek için gawk'ın işlevselliğini genişletir .

  • Thompson AWK veya TAWK , daha önce Thompson Automation Software tarafından satılan, DOS ve Windows için bir AWK derleyicisidir .
  • Jawk , Java'da AWK uygulayan bir projedir. AWK programlarındaki Java özelliklerine erişim sağlamak için dile uzantılar eklenir (örn. Java iş parçacıkları, yuvalar, Koleksiyonlar, vb.).

Arasöz

  • Kuş, AWK amblemi (veya AWK Programlama Dili kitabının kapağında Alca dır ).

Kitaplar

Ayrıca

Dış bağlantılar

Uygulamalar