awk gawk - kalıp tarama ve işleme dili
gawk [ POSIX or GNU style options ] -f program-file [ - - ] file . . .
gawk [ POSIX or GNU style options ] [ - - ] program-text file . . .
Gawk, GNU Projesi'nin AWK programlama dili uygulamasıdır. POSIX 1003.1 standardındaki dil tanımına uygundur. Bu sürüm ise Aho, Kernighan ve Weinberger tarafından yazılan The AWK Programming Language'deki açıklamaya dayanmaktadır. Gawk, Brian Kernighan'ın awk yazılımının mevcut sürümünde ve çok sayıda GNU'ya özgü uzantıda bulunan ek özellikleri sağlar.
Komut satırı, kendisini gawk için seçeneklerden, AWK program metninden (-f veya - -include seçenekleriyle sağlanmıyorsa) ve ARGC ve ARGV önceden tanımlanmış AWK değişkenlerinde kullanıma sunulacak değerlerden oluşur.
Bu kılavuz sayfası kasıtlı olarak mümkün olduğu kadar kısadır. Tüm ayrıntılar GAWK: Etkili AWK Programlama'da verilmektedir ve herhangi bir özellikle ilgili tüm hikayeyi orada aramanız gerekir. Mümkün olduğunda, kılavuzun çevrimiçi versiyonuna bağlantılar sağlanır.
Gawk seçenekleri, geleneksel POSIX tarzı tek harfli seçenekler veya GNU tarzı uzun seçenekler olabilir. POSIX seçenekleri tek “-” ile başlarken, uzun seçenekler “- -” ile başlar. Hem GNU'ya özgü özellikler hem de POSIX tarafından zorunlu kılınan özellikler için uzun seçenekler sağlanmıştır.
Gawk'e özgü seçenekler genellikle uzun seçenek biçiminde kullanılır. Uzun seçeneklere yönelik bağımsız değişkenler ya seçenekle bir = işaretiyle, arada boşluk olmadan birleştirilir veya bir sonraki komut satırı bağımsız değişkeninde sağlanabilir. Kısaltma benzersiz kaldığı sürece uzun seçenekler kısaltılabilir.
Ek olarak, her uzun seçeneğin karşılık gelen bir kısa seçeneği vardır, böylece seçeneğin işlevselliği #! yürütülebilir komut dizisinden kullanılabilir.
Gawk aşağıdaki seçenekleri kabul eder. Önce standart seçenekler listelenir, ardından gawk uzantıları için seçenekler kısa seçeneğe göre alfabetik olarak listelenir.
- -file program-file AWK program kaynağını ilk komut satırı bağımsız değişkeni yerine program-file dosyasından okuyun. Birden çok -f seçeneği kullanılabilir. -f ile okunan dosyalar, üstü kapalı bir @namespace "awk" ifadesiyle başlıyormuş gibi ele alınır.
- -alan ayırıcı fs Giriş alanı ayırıcısı için fs kullanın (ön tanımlı FS değişkeninin değeri).
Programın yürütülmesi başlamadan önce var değişkenine val değerini atayın. Bu tür değişken değerleri, bir AWK programının BEGIN kuralında mevcuttur.
- -characters-as-bytes Tüm giriş verilerini tek baytlık karakterler olarak ele alın. - -posix seçeneği bunu geçersiz kılar.
- -geleneksel Uyumluluk modunda çalıştırın. Uyumluluk modunda gawk, Brian Kernighan'ın awk ile aynı şekilde davranır; GNU'ya özgü uzantıların hiçbiri tanınmaz.
- -telif hakkı GNU telif hakkı bilgisi mesajının kısa sürümünü standart çıktıya yazdırın ve başarıyla çıkın.
Genel değişkenlerin, türlerinin ve son değerlerinin sıralanmış bir listesini dosya olarak yazdırın. Geçerli dizindeki varsayılan dosya awkvars.out'dır.
AWK programlarında hata ayıklamayı etkinleştirin. Varsayılan olarak, hata ayıklayıcı komutları etkileşimli olarak klavyeden okur (standart giriş). İsteğe bağlı file bağımsız değişkeni, hata ayıklayıcının etkileşimli olmayan şekilde yürütmesi için bir komut listesi içeren bir dosya belirtir.
Bu yürütme modunda, gawk AWK kaynak kodunu yükler ve ardından hata ayıklama komutlarını ister. Gawk, yalnızca -f ve - -include seçenekleriyle sağlanan AWK program kaynağında hata ayıklayabilir. Hata ayıklayıcı, GAWK: Etkili AWK Programlama'da belgelenmiştir; https://www.gnu.org/software/gawk/manual/html_node/Debugger.html#Debugger'a bakın.
- -source program-text AWK program kaynak kodu olarak program-text kullanın. -e aracılığıyla sağlanan her bağımsız değişken, üstü kapalı bir @namespace "awk" ifadesiyle başlıyormuş gibi ele alınır.
Ancak, -f'ye benzer şekilde, bu seçenek işlenen son seçenektir. Bu, #! betikleriyle, özellikle CGI uygulamaları için, bir URL'den komut satırına seçenekler veya kaynak kodunun (!) iletilmesini önlemek için kullanılmalıdır. Bu seçenek, komut satırı değişken atamalarını devre dışı bırakır.
- -gen-pot AWK programını tarayın ve ayrıştırın ve standart çıktıda programdaki tüm yerelleştirilebilir dizeler için girişler içeren bir GNU .pot (Taşınabilir Nesne Şablonu) biçiminde dosya oluşturun. Programın kendisi yürütülmez.
- -help Standart çıktıda mevcut seçeneklerin nispeten kısa bir özetini yazdırın. GNU Kodlama Standartları uyarınca, bu seçenekler anında ve başarılı bir çıkışa neden olur.
Bir awk kaynak kitaplığı yükleyin. Bu, AWKPATH ortam değişkenini kullanarak kitaplığı arar. İlk arama başarısız olursa, .awk son eki eklendikten sonra başka bir deneme yapılır. Dosya yalnızca bir kez yüklenecektir (yani kopyalar elenir) ve kod ana program kaynağını oluşturmaz. - -include ile okunan dosyalar, üstü kapalı bir @namespace "awk" ifadesiyle başlıyormuş gibi ele alınır.
- -trace Dahili bayt kodu adlarını, program çalıştırılırken yürütülürken yazdırın. İz, standart hataya yazdırılır. Çıktıda her ``işlem kodu''ndan önce bir + işareti gelir.
- -load lib lib paylaşılan kitaplığından bir gawk uzantısı yükleyin. Bu, AWKLIBPATH ortam değişkenini kullanarak kitaplığı arar. İlk arama başarısız olursa, platform için varsayılan paylaşılan kitaplık son eki eklendikten sonra başka bir girişimde bulunulur. Kitaplık başlatma rutininin dl_load() olarak adlandırılması bekleniyor.
Şüpheli veya diğer AWK uygulamalarına taşınabilir olmayan yapılar hakkında uyarılar sağlayın. değer için olası değerlerin listesi için https://www.gnu.org/software/gawk/manual/html_node/Options.html#Options'a bakın.
- -bignum Sayılar üzerinde rasgele hassas aritmetiği zorlar. gawk GNU MPFR ve GMP kitaplıklarını kullanmak için derlenmemişse bu seçeneğin hiçbir etkisi yoktur. (Böyle bir durumda gawk uyarı verir.)
NOT: Bu özellik şartlı tahliyededir. Birincil gawk bakıcısı, geliştirme ekibinin bir üyesi olmasına rağmen artık onu desteklemiyor. Bu durum değişirse, özellik gawk'tan kaldırılacaktır.
Uyarıyı susturmak için ortamda GAWK_NO_MPFR_WARN öğesini ayarlayın.
- -non-decimal-data Giriş verilerindeki sekizlik ve onaltılık değerleri tanır. Bu seçeneği çok dikkatli kullanın!
- -use-lc-numeric gawk öğesini, giriş verilerini ayrıştırırken yerel ayarın ondalık nokta karakterini kullanmaya zorlar.
- -nostalgia Uzun süreli awk kullanıcıları için bir nostalji anı sağlayın.
Dosyaya programın çıktısını güzel bir şekilde yazdırın. Geçerli dizindeki varsayılan dosya awkprof.out'dır. Bu seçenek, - -optimizasyon yok anlamına gelir.
- -optimize Programın dahili gösterimi üzerine gawk'ın varsayılan optimizasyonlarını etkinleştirin. Bu seçenek varsayılan olarak açıktır.
Bir profil oluşturma oturumu başlatın ve profil oluşturma verilerini prof-file'e gönderin. Geçerli dizinde varsayılan awkprof.out şeklindedir. Profil, programdaki her ifadenin sol kenarda yürütme sayısını ve kullanıcı tanımlı her işlev için işlev çağrı sayısını içerir. Gawk bu modda daha yavaş çalışır. Bu seçenek, - -optimizasyon yok anlamına gelir.
- -posix Bu, uyumluluk modunu açar ve bir dizi yaygın uzantıyı devre dışı bırakır.
- -re-interval Normal ifade eşleştirmesinde aralık ifadelerinin kullanımını etkinleştirin. Aralık ifadeleri varsayılan olarak etkindir, ancak bu seçenek geriye dönük uyumluluk için kalır.
- -no-optimize Programın dahili gösterimi üzerine gawk'ın varsayılan optimizasyonlarını devre dışı bırakın.
- -sandbox gawk'i korumalı alan modunda çalıştırın, system() işlevini devre dışı bırakın, getline ile giriş yönlendirmeyi, print ve printf ile çıkış yönlendirmeyi ve dinamik uzantıları yükleyin. Komut yürütme (işlem hatları aracılığıyla) da devre dışı bırakılır.
- -lint-old Orijinal UNIX awk sürümüne taşınabilir olmayan yapılar hakkında uyarılar sağlar.
- -version Bu özel gawk kopyası için sürüm bilgilerini standart çıktıda yazdırın. Bu, hataları bildirirken kullanışlıdır. GNU Kodlama Standartları uyarınca, bu seçenekler anında ve başarılı bir çıkışa neden olur.
Seçeneklerin sonunu işaret edin. Bu, AWK programının kendisinin bir "-" ile başlamasına yönelik daha fazla bağımsız değişkene izin vermek için kullanışlıdır.
Uyumluluk modunda, diğer tüm seçenekler geçersiz olarak işaretlenir, ancak bunun dışında yoksayılır. Normal çalışmada, program metni sağlandığı sürece, bilinmeyen seçenekler işlenmek üzere ARGV dizisindeki AWK programına aktarılır.
POSIX uyumluluğu için, uzun bir seçeneğin adından sonra -W seçeneği kullanılabilir.
Bir AWK programı, isteğe bağlı direktifler, model-eylem ifadeleri ve isteğe bağlı işlev tanımlarından oluşan bir diziden oluşur.
@include "filename "
@load "filename "
@namespace "name "
pattern { action statements }
function name(parameter list) { statements }Gawk önce program kaynağını, belirtilmişse program dosyası(lar)ndan, bağımsız değişkenlerden - -kaynak'a veya komut satırındaki ilk seçenek dışı bağımsız değişkenden okur. -f ve - -source seçenekleri, komut satırında birden çok kez kullanılabilir. Gawk, program metnini sanki tüm program dosyası ve komut satırı kaynak metinleri birleştirilmiş gibi okur.
Ayrıca, programınıza diğer kaynak dosyaları dahil etmek için @include ile başlayan satırlar kullanılabilir. Bu, - -include seçeneğini kullanmaya eşdeğerdir.
Programınıza uzantı işlevleri yüklemek için @load ile başlayan satırlar kullanılabilir. Bu, - -load seçeneğini kullanmaya eşdeğerdir.
AWKPATH ortam değişkeni, -f ve - -include seçenekleriyle adlandırılan kaynak dosyaları bulurken kullanılacak bir arama yolunu belirtir. Bu değişken yoksa, varsayılan yol ".:/usr/local/share/awk" şeklindedir. (Gerçek dizin, gawk'in nasıl oluşturulduğuna ve kurulduğuna bağlı olarak değişebilir.) -f seçeneğine verilen bir dosya adı “/ ” karakteri içeriyorsa, yol araması yapılmaz.
AWKLIBPATH ortam değişkeni, - -load seçeneğiyle adlandırılan kaynak dosyaları bulurken kullanılacak bir arama yolunu belirtir. Bu değişken yoksa varsayılan yol "/usr/local/lib/gawk" şeklindedir. (Gerçek dizin, gawk'in nasıl oluşturulduğuna ve kurulduğuna bağlı olarak değişebilir.)
Gawk, AWK programlarını aşağıdaki sırayla yürütür. İlk olarak, -v seçeneği ile belirtilen tüm değişken atamaları gerçekleştirilir. Ardından, gawk programı dahili bir biçimde derler. Ardından gawk, BEGIN kurallarındaki (varsa) kodu yürütür ve ardından ARGV dizisindeki (ARGV[ARGC-1]'e kadar) adlı her dosyayı okumaya devam eder. Komut satırında adlandırılmış dosya yoksa, gawk standart girişi okur.
Komut satırındaki bir dosya adı var=val biçimindeyse, değişken ataması olarak değerlendirilir. var değişkenine val değeri atanacak. (Bu, herhangi bir BEGIN kural(lar) çalıştırıldıktan sonra gerçekleşir.)
Belirli bir ARGV öğesinin değeri boşsa (""), gawk bunun üzerinden atlar.
Her girdi dosyası için, bir BEGINFILE kuralı varsa, gawk dosyanın içeriğini işlemeden önce ilişkili kodu yürütür. Benzer şekilde, gawk, dosyayı işledikten sonra ENDFILE kurallarıyla ilişkili kodu yürütür.
Girişteki her kayıt için gawk, bunun AWK programındaki herhangi bir kalıp ile eşleşip eşleşmediğini test eder. gawk, kaydın eşleştiği her model için ilişkili eylemi yürütür. Kalıplar, programda oluş sırasına göre test edilir.
Son olarak, tüm girdiler tükendikten sonra, gawk, (varsa) END kural(lar)ındaki kodu yürütür.
POSIX'e göre awk komut satırında adı geçen dosyalar metin dosyaları olmalıdır. Değillerse, davranış ``tanımsız''dır. Çoğu awk sürümü, komut satırındaki bir dizini önemli bir hata olarak kabul eder.
gawk için, komut satırındaki bir dizin bir uyarı oluşturur, ancak bunun dışında atlanır. - -posix veya - -geleneksel seçeneklerinden biri verilirse, gawk komut satırındaki dizinleri önemli bir hata olarak işlemeye geri döner.
AWK değişkenleri dinamiktir; ilk kullanıldıklarında ortaya çıkarlar. Değerleri, nasıl kullanıldıklarına bağlı olarak kayan noktalı sayılar veya dizeler veya her ikisidir. Ek olarak, gawk, değişkenlerin normal ifade türüne sahip olmasına izin verir. AWK ayrıca tek boyutlu dizilere sahiptir; çok boyutlu diziler simüle edilebilir. Ancak, gawk gerçek dizi dizileri sağlar. Bir program çalışırken birkaç önceden tanımlanmış değişken ayarlanır; bunlar gerektiği gibi açıklanmış ve aşağıda özetlenmiştir.
Normalde, kayıtlar yeni satır karakterleriyle ayrılır. Yerleşik RS değişkenine değerler atayarak kayıtların nasıl ayrılacağını kontrol edebilirsiniz. Ayrıntılar için https://www.gnu.org/software/gawk/manual/html_node/Records.html adresine bakın.
Her giriş kaydı okunduğunda gawk, alan ayırıcı olarak FS değişkeninin değerini kullanarak kaydı alanlara böler. Ek olarak, giriş alanı bölmeyi kontrol etmek için FIELDWIDTHS ve FPAT kullanılabilir. https://www.gnu.org/software/gawk/manual/html_node/Fields.html adresinden başlayarak ayrıntılara bakın.
Giriş kaydındaki her alana, konumuna göre başvurulabilir: $1, $2 vb. $0, baştaki ve sondaki boşluklar dahil tüm kayıttır.
NF değişkeni, giriş kaydındaki toplam alan sayısına ayarlanmıştır.
Var olmayan alanlara yapılan başvurular (yani, $NF'den sonraki alanlar) boş dizeyi üretir. Ancak, var olmayan bir alana atama (ör. $ (NF+2)=5), NF'nin değerini artırır, değerleri boş dize olan herhangi bir araya giren alan oluşturur ve alanların OFS değeriyle ayrılarak $0 değerinin yeniden hesaplanmasına neden olur. Negatif numaralı alanlara yapılan başvurular önemli bir hataya neden olur. NF değerinin düşürülmesi, yeni değerin ötesindeki alanların değerlerinin kaybolmasına ve alanların OFS değeriyle ayrılmasıyla $0 değerinin yeniden hesaplanmasına neden olur.
Mevcut bir alana değer atamak, $0 referans alındığında tüm kaydın yeniden oluşturulmasına neden olur. Benzer şekilde, $0 değerine bir değer atanması, kaydın yeniden bölünmesine ve alanlar için yeni değerler oluşturulmasına neden olur.
Gawk 'ın yerleşik değişkenleri aşağıda listelenmiştir. Bu liste kasıtlı olarak kısa ve özdür. Ayrıntılar için bkz. https://www.gnu.org/software/gawk/manual/html_node/Built_002din-Variables.
Komut satırı bağımsız değişkenlerinin sayısı.
İşlenmekte olan geçerli dosyanın ARGV içindeki dizini.
Komut satırı argümanları dizisi. Dizi, 0 ile ARGC - 1 arasında dizine alınır.
POSIX olmayan sistemlerde, tüm dosya G/Ç'leri için “ikili” modun kullanımını belirtir. Ayrıntılar için https://www.gnu.org/software/gawk/manual/html_node/PC-Using.html adresine bakın.
Sayılar için dönüştürme biçimi, varsayılan olarak "%.6g".
Geçerli ortamın değerlerini içeren bir dizi. Dizi, ortam değişkenleri tarafından dizine eklenir, her öğe o değişkenin değeridir.
getline için yeniden yönlendirme yapılırken, getline için okuma sırasında veya close() sırasında bir sistem hatası oluşursa, ERRNO, hatayı açıklayan bir dizeye ayarlanır. Değer, İngilizce dışındaki yerel ayarlara çevrilebilir.
Alan genişliklerinin boşlukla ayrılmış listesi. Ayarlandığında, gawk, alan ayırıcı olarak FS değişkeninin değerini kullanmak yerine girişi sabit genişlikli alanlara ayrıştırır. İsteğe bağlı olarak her alan genişliğinden önce, alan başlamadan önce atlanacak karakter sayısını belirten iki nokta üst üste ile ayrılmış bir değer gelebilir.
Geçerli giriş dosyasının adı. Komut satırında herhangi bir dosya belirtilmemişse, FILENAME değeri "- " olur. Ancak FILENAME, BEGIN kuralı içinde tanımsızdır (getline tarafından ayarlanmadıkça).
Geçerli giriş dosyasındaki giriş kayıt numarası.
Bir kayıttaki alanların içeriğini açıklayan bir normal ifade. Ayarlandığında, gawk girişi, alan ayırıcı olarak FS değerini kullanmak yerine, alanların normal ifadeyle eşleştiği alanlara ayrıştırır.
Giriş alanı ayırıcısı, varsayılan olarak bir boşluktur. Ayrıntılar için https://www.gnu.org/software/gawk/manual/html_node/Field-Separators.html adresine bakın.
Dizinleri ve karşılık gelen değerleri, programdaki tüm kullanıcı tanımlı veya uzantı işlevlerinin adları olan bir dizi. NOT: delete deyimini FUNCTAB dizisiyle kullanamazsınız.
Tüm normal ifade ve dize işlemlerinin büyük/küçük harf duyarlılığını kontrol eder. Ayrıntılar için https://www.gnu.org/software/gawk/manual/html_node/Case_002dsensitivity.html adresine bakın.
Bir AWK programı içinden - -lint seçeneğinin dinamik kontrolünü sağlar.
Geçerli giriş kaydındaki alan sayısı.
Şu ana kadar görülen giriş kayıtlarının toplam sayısı.
Sayılar için çıktı biçimi, varsayılan olarak "%.6g".
Çıktı alanı ayırıcısı, varsayılan olarak bir boşluktur.
Çıktı kayıt ayırıcısı, varsayılan olarak yeni satırdır.
Rastgele hassas kayan noktalı sayıların çalışma hassasiyeti, varsayılan olarak 53'tür.
Bu dizinin öğeleri, çalışan AWK programı hakkındaki bilgilere erişim sağlar. Ayrıntılar için https://www.gnu.org/software/gawk/manual/html_node/Auto_002dset adresine bakın.
Sayılar üzerinde isteğe bağlı hassas aritmetik için kullanılacak yuvarlama modu, varsayılan olarak "N" (IEEE-754 roundTiesToEven modu). Ayrıntılar için https://www.gnu.org/software/gawk/manual/html_node/Setting-the-rounding-mode adresine bakın.
Giriş kayıt ayırıcısı, varsayılan olarak yeni satırdır.
Kayıt sonlandırıcı. Gawk, RT'yi, RS tarafından belirtilen karakter veya normal ifadeyle eşleşen giriş metnine ayarlar.
match() tarafından eşleşen ilk karakterin dizini; Eşleşme yoksa 0.
match() ile eşleşen dizenin uzunluğu; Eşleşme yoksa -1.
Dizi öğelerinde birden çok alt simgeyi ayırmak için kullanılan dize, varsayılan olarak "\034".
Dizinleri, programda o anda tanımlanmış tüm genel değişkenlerin ve dizilerin adları olan bir dizi. SYMTAB dizisiyle delete deyimini kullanamaz veya değişken adı olmayan bir dizine sahip öğelere atama yapamazsınız.
AWK programının metin alanı; programın dizeleri için yerelleştirilmiş çevirileri bulmak için kullanılır.
Diziler, köşeli parantezler ([ ve ]) arasında bir ifadeyle alt simge olarak yazılır. İfade bir ifade listesiyse (ifade, ifade . . .), dizi alt simgesi, her ifadenin (dize) değerinin SUBSEP değişkeninin değeriyle ayrılmış birleştirilmesinden oluşan bir dizedir. Bu özellik, çok boyutlu dizileri simüle etmek için kullanılır. Örneğin:
i = "A"; j = "B"; k = "C"
x[i, j, k] = "hello, world\n"
"hello, world\n" dizesini, "A\034B\034C" dizesi tarafından dizine eklenen x dizisinin öğesine atar. AWK'deki tüm diziler ilişkiseldir, yani dize değerleri tarafından dizine eklenir.
in özel operatörü, bir dizinin belirli bir değerden oluşan bir dizine sahip olup olmadığını test etmek için kullanılabilir:
if (val in array) print array[val]
Dizinin birden çok alt simgesi varsa, (i, j) dizisini kullanın.
in yapısı, bir dizinin tüm öğeleri üzerinde yineleme yapmak için bir for döngüsünde de kullanılabilir. Ancak (i, j) in array yapısı yalnızca testlerde çalışır, for döngülerinde çalışmaz.
delete deyimi kullanılarak bir diziden bir öğe silinebilir. delete deyimi, bir alt simge olmadan yalnızca dizi adını belirterek bir dizinin tüm içeriğini silmek için de kullanılabilir.
gawk gerçek çok boyutlu dizileri destekler. Bu tür dizilerin C veya C++'daki gibi ``dikdörtgen'' olması gerekmez. Ayrıntılar için https://www.gnu.org/software/gawk/manual/html_node/Arrays adresine bakın.
Gawk, AWK'daki tüm değişkenlerin genel olduğu gerçeğini aşmaya yardımcı olan basit bir ad alanı olanağı sağlar.
Bir nitelikli ad, iki nokta üst üste (::) ile birleştirilmiş iki basit tanımlayıcıdan oluşur. Sol tanımlayıcı ad alanını temsil eder ve sağ tanımlayıcı onun içindeki değişkendir. Tüm basit (nitelikli olmayan) adların ``geçerli'' ad alanında olduğu kabul edilir; varsayılan ad alanı awk şeklindedir. Ancak, yalnızca büyük harflerden oluşan basit tanımlayıcılar, geçerli ad alanı farklı olsa bile awk ad alanına girmeye zorlanır.
Geçerli ad alanını bir @namespace "name " yönergesiyle değiştirirsiniz.
Standart önceden tanımlanmış yerleşik işlev adları, ad alanı adları olarak kullanılamaz. gawk tarafından sağlanan ek işlevlerin adları, diğer ad alanlarında ad alanı adları veya basit tanımlayıcılar olarak kullanılabilir. Daha fazla ayrıntı için bkz. https://www.gnu.org/software/gawk/manual/html_node/Namespaces.html#Namespaces.
Değişkenler ve alanlar (kayan noktalı) sayılar veya dizeler veya her ikisi olabilir. Normal ifadeler de olabilirler. Bir değişkenin değerinin nasıl yorumlanacağı bağlamına bağlıdır. Sayısal bir ifadede kullanılırsa, sayı olarak ele alınır; bir dizi olarak kullanılırsa, bir dizi olarak ele alınacaktır.
Bir değişkeni sayı olarak ele almaya zorlamak için ona sıfır ekleyin; onu bir dize olarak ele almaya zorlamak için onu boş dizeyle birleştirin.
Başlatılmamış değişkenler sıfır sayısal değerine ve "" dize değerine (boş veya boş dize) sahiptir.
Bir dizginin bir sayıya dönüştürülmesi gerektiğinde, dönüştürme strtod(3) kullanılarak gerçekleştirilir. Bir sayı, sprintf(3) için biçim dizesi olarak CONVFMT değeri kullanılarak ve bağımsız değişken olarak değişkenin sayısal değeri kullanılarak bir dizeye dönüştürülür. Ancak, AWK'deki tüm sayılar kayan noktalı olsa da, tamsayı değerleri her zaman tam sayı olarak dönüştürülür.
Gawk karşılaştırmaları şu şekilde gerçekleştirir: İki değişken sayısal ise sayısal olarak karşılaştırılır. Değerlerden biri sayısal, diğeri ise “sayısal dizi” olan bir dizi değerine sahipse, karşılaştırmalar da sayısal olarak yapılır. Aksi takdirde, sayısal değer bir diziye dönüştürülür ve dizi karşılaştırması yapılır. İki dizi, elbette diziler olarak karşılaştırılır.
"57" gibi dize sabitlerinin sayısal dizeler değil olduğunu, dize sabitleri olduğunu unutmayın. "Sayısal dizi" fikri yalnızca alanlar, getline girişi, FILENAME, ARGV öğeleri, ENVIRON öğeleri ve sayısal dizeler olan split() veya patsplit() tarafından oluşturulan bir dizinin öğeleri için geçerlidir. Temel fikir, kullanıcı girişi ve yalnızca sayısal görünen kullanıcı girişinin bu şekilde ele alınması gerektiğidir.
AWK programınızın kaynak kodunda C tarzı sekizli ve onaltılı sabitleri kullanabilirsiniz. Örneğin, 011 sekizlik değeri ondalık sayıya 9 eşittir ve onaltılık değer 0x11 ondalık sayıya eşittir 17.
AWK'daki dize sabitleri, çift tırnak içine alınmış karakter dizileridir ("değer" gibi). Dizeler içinde, C'de olduğu gibi belirli kaçış dizileri tanınır. Ayrıntılar için https://www.gnu.org/software/gawk/manual/html_node/Escape-Sequences'a bakın.
Normal ifade sabiti, eğik çizgiler arasına alınmış bir karakter dizisidir (/value/ gibi).
Kılavuzda açıklanan çıkış dizileri, sabit normal ifadeler içinde de kullanılabilir (örneğin, /[ \t\f\n\r\v]/ boşluk karakterleriyle eşleşir).
Gawk, kesinlikle yazılmış düzenli ifade sabitleri sağlar. Bunlar baştaki @ sembolüyle yazılır (şöyle: @/value/). Bu tür sabitler, skalerlere (değişkenler, dizi öğeleri) atanabilir ve kullanıcı tanımlı işlevlere geçirilebilir. Bu şekilde atanan değişkenler normal ifade tipine sahiptir.
AWK, hat yönelimli bir dildir. Model önce gelir, sonra eylem. Eylem ifadeleri, { ve } içinde yer alır. Ya kalıp eksik olabilir ya da eylem eksik olabilir ama elbette ikisi birden değil. Kalıp eksikse, eylem her bir giriş kaydı için yürütülür. Eksik bir işlem şuna eşdeğerdir:
{ print }tüm kaydı yazdırır.
Yorumlar # karakteri ile başlar ve satır sonuna kadar devam eder. İfadeleri ayırmak için boş satırlar kullanılabilir. Normalde bir ifade yeni bir satırla biter, ancak {, ?, :, && veya || ile biten satırlar için durum böyle değildir. do veya else ile biten satırların ifadeleri de bir sonraki satırda otomatik olarak devam eder. Diğer durumlarda, bir satır "\" ile sonlandırılarak devam ettirilebilir, bu durumda yeni satır yoksayılır. Ancak # karakterinden sonra gelen “\” özel değildir.
Birden fazla ifade “;” ile ayrılarak tek satıra yazılabilir. ”. Bu, hem bir model-eylem çiftinin (olağan durum) eylem kısmındaki ifadeler hem de model-eylem ifadelerinin kendileri için geçerlidir.
AWK kalıpları aşağıdakilerden biri olabilir:
BEGIN END BEGINFILE ENDFILE /regular expression/ relational expression pattern && pattern pattern || pattern pattern ? pattern : pattern (pattern) ! pattern pattern1, pattern2
BEGIN ve END, girdiye karşı test edilmeyen iki özel kalıp türüdür. Tüm BEGIN kalıplarının eylem bölümleri, sanki tüm ifadeler tek bir BEGIN kuralında yazılmış gibi birleştirilir. Girişlerden herhangi biri okunmadan önce yürütülürler. Benzer şekilde, tüm END kuralları birleştirilir ve tüm girdi tükendiğinde (veya bir exit ifadesi yürütüldüğünde) yürütülür. Kalıp ifadelerinde BEGIN ve END kalıpları diğer kalıplarla birleştirilemez. BEGIN ve END kalıplarında eksik işlem parçaları olamaz.
BEGINFILE ve ENDFILE, eylemleri her komut satırı giriş dosyasının ilk kaydı okunmadan önce ve her dosyanın son kaydı okunduktan sonra yürütülen ek özel kalıplardır. BEGINFILE kuralının içinde, dosya başarıyla açıldıysa ERRNO değeri boş dizedir. Aksi takdirde, dosyayla ilgili bir sorun vardır ve kodun onu atlamak için sonraki dosya'yı kullanması gerekir. Bu yapılmazsa, gawk açılamayan dosyalar için her zamanki ölümcül hatasını üretir.
/Normal ifade/ kalıpları için, ilgili ifade, normal ifadeyle eşleşen her giriş kaydı için yürütülür. Normal ifadeler temelde egrep(1) içindekilerle aynıdır. Normal ifadelerle ilgili ayrıntılar için https://www.gnu.org/software/gawk/manual/html_node/Regexp.html adresine bakın.
Bir ilişkisel ifade, aşağıda eylemlerle ilgili bölümde tanımlanan işleçlerden herhangi birini kullanabilir. Bunlar genellikle belirli alanların belirli normal ifadelerle eşleşip eşleşmediğini test eder.
&&, || ve ! operatörleri, C'de olduğu gibi sırasıyla mantıksal VE, mantıksal OR ve mantıksal DEĞİL'dir. C'de olduğu gibi kısa devre değerlendirmesi yaparlar ve daha ilkel kalıp ifadelerini birleştirmek için kullanılırlar. Çoğu dilde olduğu gibi, değerlendirme sırasını değiştirmek için parantezler kullanılabilir.
Bir ifadenin kalıp1, kalıp2 formuna aralık kalıbı denir. Örnek1 ile eşleşen bir kayıtla başlayan ve kalıp2 ile eşleşen bir kayda kadar devam eden tüm giriş kayıtlarıyla eşleşir. Başka herhangi bir örüntü ifadesi ile birleşmez.
Eylem ifadeleri parantez içinde, { ve } içine alınır. Eylem ifadeleri, çoğu dilde bulunan olağan atama, koşullu ve döngü ifadelerinden oluşur. Kullanılabilir operatörler, kontrol ifadeleri ve giriş/çıkış ifadeleri, C'dekilere göre düzenlenmiştir.
AWK'daki operatörler, azalan öncelik sırasına göre şunlardır:
Gruplama
Alan referansı.
Arttırma ve azaltma, hem önek hem de sonek.
Üs alma.
Tekli artı, tekli eksi ve mantıksal olumsuzlama.
Çarpma, bölme ve modül.
Toplama ve çıkarma.
Dize birleştirme.
getline, print ve printf için ardışık G/Ç.
Düzenli ilişki operatörleri.
Normal ifade eşleşmesi, reddedilen eşleşme.
Dizi üyeliği.
Mantıksal VE.
Mantıksal VEYA.
C koşullu ifadesi. Bu, ifade1 biçiminde mi? ifade2 : ifade3 . ifade1 doğruysa, ifadenin değeri ifade2 olur, aksi halde ifade3 olur. ifade2 ve ifade3'den yalnızca biri değerlendirilir.
Atama. Hem mutlak atama (var=değer) hem de operatör ataması (diğer formlar) desteklenir.
Kontrol ifadeleri aşağıdaki gibidir:
if (condition) statement [ else statement ] while (condition) statement do statement while (condition) for (expr1; expr2; expr3) statement for (var in array) statement break continue delete array [ index ] delete array exit [ expression ] { statements } switch (expression) { case value|regex : statement . . . [ default: statement ] }
Giriş/çıkış ifadeleri aşağıdaki gibidir:
Açık bir dosyayı, kanalı veya ortak işlemi kapatın. İsteğe bağlı nasıl yalnızca iki yönlü bir borunun bir ucunu bir yardımcı işlemeye kapatırken kullanılmalıdır. Bu, "to" veya "from" şeklinde bir dize değeri olmalıdır.
Sonraki giriş kaydından $0 ayarlayın; NF, NR, FNR, RT olarak ayarlayın.
Sonraki dosya kaydından $0 ayarlayın; NF, RT olarak ayarlayın.
Sonraki giriş kaydından var ayarlayın; NR, FNR, RT olarak ayarlayın.
Sonraki dosya kaydından var öğesini ayarlayın; RT'yi ayarlayın.
Çıktıyı yukarıdaki gibi $0 veya var'a aktararak komutunu çalıştırın ve RT.
Çıktıyı yukarıdaki gibi $0 veya var'a aktaran bir ortak işlem olarak command'i çalıştırın ve RT. (komut bir yuva da olabilir. Aşağıdaki Özel Dosya Adları alt bölümüne bakın.)
Açık çıktı dosyası veya boru dosyası ile ilişkili tüm arabellekleri temizleyin. file eksikse veya boş dize ise, tüm açık çıktı dosyalarını ve kanallarını boşaltın.
Mevcut giriş kaydını işlemeyi durdurun. Bir sonraki giriş kaydını okuyun ve AWK programındaki ilk kalıpla baştan işlemeye başlayın. Giriş verilerinin sonuna ulaştığınızda, herhangi bir END kuralını/kurallarını yürütün.
Geçerli girdi dosyasını işlemeyi durdurun. Okunan bir sonraki girdi kaydı, bir sonraki girdi dosyasından gelir. FILENAME ve ARGIND'i güncelleyin, FNR'yi 1'e sıfırlayın ve AWK programındaki ilk kalıpla baştan işlemeye başlayın. Giriş verilerinin sonuna ulaştığınızda, herhangi bir ENDFILE ve END kuralını/kurallarını yürütün.
Mevcut kaydı yazdırın. Çıkış kaydı, ORS değeri ile sonlandırılır.
İfadeleri yazdırın. Her ifade, OFS değeriyle ayrılır. Çıkış kaydı, ORS değeri ile sonlandırılır.
İfadeleri dosyaya yazdırın. Her ifade, OFS değeriyle ayrılır. Çıkış kaydı, ORS değeri ile sonlandırılır.
Biçimlendirin ve yazdırın.
Biçimlendirin ve dosyaya yazdırın.
cmd-line komutunu yürütün ve çıkış durumunu döndürün. (Bu, POSIX olmayan sistemlerde mevcut olmayabilir.) Çıkış durumuyla ilgili tüm ayrıntılar için https://www.gnu.org/software/gawk/manual/html_node/I_002fO-Functions.html#I_002fO-Functions adresine bakın.
print ve printf için ek çıktı yönlendirmelerine izin verilir.
Çıktıyı dosyaya ekleyin.
Bir boruya yazın.
Verileri bir ortak işleme veya sokete gönderin. (Aşağıdaki Özel Dosya Adları alt bölümüne de bakın.)
getline komutu başarı durumunda 1, dosya sonunda sıfır ve hata durumunda -1 döndürür. errno(3) değeri G/Ç işleminin yeniden denenebileceğini gösteriyorsa ve PROCINFO["giriş ", " RETRY"] ayarlanırsa, -1 yerine -2 döndürülür ve getline'a başka çağrılar denenebilir. Bir hata üzerine ERRNO, sorunu açıklayan bir dizeye ayarlanır.
NOT: İki yönlü bir soketin açılmaması, çağıran işleve geri döndürülen önemli olmayan bir hatayla sonuçlanır. Bir döngü içinde getline veya print veya printf'ten bir boru, ortak işlem veya soket kullanıyorsanız, komutun veya soketin yeni örneklerini oluşturmak için close() kullanmanız gerekir. AWK, EOF döndürdüklerinde boruları, yuvaları veya yardımcı işlemleri otomatik olarak kapatmaz.
printf ifadesinin ve sprintf() işlevinin AWK sürümleri, C'ninkilere benzer. Ayrıntılar için https://www.gnu.org/software/gawk/manual/html_node/Printf.html adresine bakın.
print veya printf'den bir dosyaya veya bir dosyadan getline aracılığıyla G/Ç yeniden yönlendirmesi yaparken, gawk belirli özel dosya adlarını dahili olarak tanır. Bu dosya adları, gawk 'ın üst sürecinden (genellikle kabuk) devralınan açık dosya tanımlayıcılarına erişim sağlar. Bu dosya adları, veri dosyalarını adlandırmak için komut satırında da kullanılabilir. Dosya adları şunlardır:
Standart giriş.
Standart giriş.
Standart çıktı.
Standart hata çıkışı.
Açık dosya tanıtıcısı n ile ilişkili dosya.
Aşağıdaki özel dosya adları, TCP/IP ağ bağlantıları oluşturmak için |& ortak işlem işleciyle birlikte kullanılabilir:
/inet/tcp/lport/rhost/rport /inet4/tcp/lport/rhost/rport /inet6/tcp/lport/rhost/rport
lport yerel bağlantı noktasından rport uzak bağlantı noktası üzerindeki uzak rhost ana bilgisayarına TCP/IP bağlantısı için dosyalar. Sistemin bir bağlantı noktası seçmesi için 0 bağlantı noktasını kullanın. IPv4 bağlantısını zorlamak için /inet4'ü ve IPv6 bağlantısını zorlamak için /inet6'yı kullanın. Düz /inet sistem varsayılanını kullanır (büyük ihtimalle IPv4). Yalnızca |& iki yönlü G/Ç operatörüyle kullanılabilir.
/inet/udp/lport/rhost/rport /inet4/udp/lport/rhost/rport /inet6/udp/lport/rhost/rport
Benzer, ancak TCP/IP yerine UDP/IP kullanın.
AWK aşağıdaki yerleşik aritmetik işlevlere sahiptir:
y/x'in arktanjantını radyan cinsinden döndürün.
ifade'nin radyan cinsinden kosinüsünü döndürün.
üstel fonksiyon.
Tamsayıya kes.
num ve denom öğelerini tamsayılara kısaltın. sonuç["bölüm"]'de num bölümünü denom'e bölü ve kalanı olarak döndür sonuç["kalan"]. Bu bir gawk uzantısıdır ve özellikle keyfi olarak büyük tamsayılarla çalışırken değerlidir.
Doğal logaritma işlevi.
0 ≤ N < 1 olacak şekilde, sıfır ile bir arasında rastgele bir sayı N döndürün.
ifade'nin radyan cinsinden sinüsünü döndürür.
ifade'nin karekökünü döndürür.
Rastgele sayı üreteci için yeni çekirdek olarak ifade kullanın. ifade sağlanmazsa, günün saatini kullanın. Rastgele sayı üreteci için önceki çekirdeği döndürün.
Gawk aşağıdaki yerleşik dize işlevlerine sahiptir; ayrıntılar https://www.gnu.org/software/gawk/manual/html_node/String-Functions adresinde verilmektedir.
s kaynak dizisindeki öğelerin sayısını döndürür. gawk 'nin değerleri karşılaştırmak için normal kurallarını kullanarak gawk 'in içeriğini sıralayın ve sıralanan s değerlerinin dizinlerini 1'den başlayan sıralı tamsayılarla değiştirin. İsteğe bağlı hedef dizi d belirtilirse, önce s'yi d olarak çoğaltın ve sonra d kaynak dizisinin dizinlerini bırakarak d sıralayın > değişmedi. İsteğe bağlı how dizesi yönü ve karşılaştırma kipini kontrol eder. Nasıl için geçerli değerler https://www.gnu.org/software/gawk/manual/html_node/String-Functions.html#String-Functions içinde açıklanmıştır. s ve d'nin aynı dizi olmasına izin verilir; bu sadece üçüncü argümanı da sunarken anlamlıdır.
s kaynak dizisindeki öğelerin sayısını döndürür. Davranış, sıralama için dizi değerlerinin değil, index dizisinin kullanılması dışında asort() ile aynıdır. Tamamlandığında, dizi sayısal olarak dizine eklenir ve değerler orijinal dizinlerin değerleridir. Orijinal değerler kaybolur; bu nedenle, orijinali korumak istiyorsanız ikinci bir dizi sağlayın. İsteğe bağlı nasıl dizesinin amacı asort() ile aynıdır. Burada da s ve d'nin aynı dizi olmasına izin verilir; bu sadece üçüncü argümanı da sunarken anlamlıdır.
r normal ifadesinin eşleşmeleri için t hedef dizesini arayın. h, g veya G ile başlayan bir dizeyse, tüm r eşleşmelerini s ile değiştirin. Aksi takdirde, h, hangi r eşleşmesinin değiştirileceğini gösteren bir sayıdır. t sağlanmazsa, bunun yerine $0 kullanın. s yerine geçen metin içinde, n'nin 1'den 9'a kadar bir rakam olduğu \n, dizisi, yalnızca n'in parantez içindeki alt ifadesiyle eşleşen metni belirtmek için kullanılabilir. \0 dizisi, & karakteri gibi eşleşen metnin tamamını temsil eder. sub() ve gsub()'dan farklı olarak, değiştirilen dize işlevin sonucu olarak döndürülür ve orijinal hedef dize değiştirilmez.
t dizesindeki r normal ifadesiyle eşleşen her alt dize için, s dizesini değiştirin ve değiştirme sayısını döndürün. t sağlanmazsa, $0 kullanın. Değiştirme metnindeki bir &, gerçekten eşleşen metinle değiştirilir. Bir sabit değer & almak için \& kullanın. (Bu, "\\&" olarak yazılmalıdır; sub(), gsub() ve gensub()'un değiştirilen metnindeki ve işaretleri ve ters eğik çizgilerle ilgili kuralların daha kapsamlı bir tartışması için https://www.gnu.org/software/gawk/manual/html_node/Gory-Details.html#Gory-Details'e bakın.)
s dizisindeki t dizisinin dizinini veya t yoksa sıfırı döndürür. (Bu, karakter indekslerinin birden başladığı anlamına gelir.)
s dizisinin uzunluğunu veya s sağlanmazsa $0 uzunluğunu döndürür. Bir dizi bağımsız değişkeniyle uzunluk(), dizideki öğe sayısını döndürür.
r normal ifadesinin bulunduğu s cinsinden konumu veya r yoksa sıfırı döndürün ve RSTART ve RLENGTH değerlerini ayarlayın. Bağımsız değişken sırasının ~ operatörüyle aynı olduğuna dikkat edin: str ~ re.
a dizisinin nasıl çalıştığının açıklaması için https://www.gnu.org/software/gawk/manual/html_node/String-Functions.html#String-Functions adresine bakın. verilmesi halinde doldurulur.
s dizesini a dizisine ve r düzenli ifadesindeki ayırıcılar seps dizisine bölün ve alan sayısını döndürün. Öğe değerleri, r ile eşleşen s bölümleridir. seps[i]'nin değeri, a[i]'den sonra görünen muhtemelen boş ayırıcıdır. seps[0]'nin değeri, muhtemelen boş önde gelen ayırıcıdır. r atlanırsa, bunun yerine FPAT kullanılır. Önce a ve seps dizileri temizlenir. Bölme, FPAT ile alan bölme işlemiyle aynı şekilde davranır.
s dizesini a dizisine ve r düzenli ifadesindeki ayırıcılar seps dizisine bölün ve alan sayısını döndürün. r atlanırsa, bunun yerine FS kullanılır. Önce a ve seps dizileri temizlenir. seps[i], r ile a[i] ile a[i+1] arasında eşleşen alan ayırıcıdır. Bölme, alan bölmeyle aynı şekilde davranır.
ifade listesini fmt'ye göre yazdırın ve sonuç dizesini döndürün.
str öğesini inceleyin ve sayısal değerini döndürün. str önünde bir 0 ile başlıyorsa, onu sekizlik bir sayı olarak kabul edin. str, baştaki bir 0x veya 0X ile başlıyorsa, onu onaltılık bir sayı olarak kabul edin. Aksi takdirde, bunun bir ondalık sayı olduğunu varsayalım.
Tıpkı gsub() gibi, ancak yalnızca ilk eşleşen alt dizeyi değiştirin. Sıfır veya bir döndürün.
i'den başlayarak s öğesinin en fazla n karakterlik alt dizesini döndürür. n atlanırsa, kalan s'yi kullanın.
str dizesinin bir kopyasını, str içindeki tüm büyük harfler karşılık gelen küçük harflere çevrilmiş olarak döndürün. Alfabetik olmayan karakterler değiştirilmeden bırakılır.
str dizesinin bir kopyasını, str içindeki tüm küçük harfler karşılık gelen büyük harflere çevrilmiş olarak döndürün. Alfabetik olmayan karakterler değiştirilmeden bırakılır.
Gawk, çok baytlı farkındadır. Bu, index(), uzunluk(), substr() ve match() terimlerinin hepsinin şu terimlerle çalıştığı anlamına gelir: bayt değil, karakter sayısı.
Gawk, zaman damgalarını almak ve bunları biçimlendirmek için aşağıdaki işlevleri sağlar. Ayrıntılar https://www.gnu.org/software/gawk/manual/html_node/Time-Functions adresinde verilmektedir.
datespec'i, systime() tarafından döndürülenle aynı biçimde bir zaman damgasına dönüştürün ve sonucu döndürün. utc-flag mevcutsa ve sıfır veya boş değilse, saatin UTC zaman diliminde olduğu varsayılır; aksi takdirde, saatin yerel saat diliminde olduğu varsayılır. datespec yeterli öğe içermiyorsa veya elde edilen süre aralığın dışındaysa, mktime() -1 değerini döndürür. datespec ayrıntıları için https://www.gnu.org/software/gawk/manual/html_node/Time-Functions.html#Time-Functions adresine bakın.
Zaman damgasını, biçim'deki belirtime göre biçimlendirin. utc-flag varsa ve sıfır değilse veya boş değilse, sonuç UTC'dir, aksi takdirde sonuç yerel saattir. zaman damgası, systime() tarafından döndürülen biçimle aynı olmalıdır. zaman damgası eksikse, günün geçerli saati kullanılır. format eksikse, date(1) çıktısına eşdeğer bir varsayılan biçim kullanılır. Varsayılan biçim, PROCINFO["strftime"]'da mevcuttur. Kullanılabilir olması garanti edilen biçim dönüştürmeleri için ISO C'deki strftime() işlevi belirtimine bakın.
Epoch'tan (POSIX sistemlerinde 1970-01-01 00:00:00 UTC) bu yana geçen saniye sayısı olarak günün geçerli saatini döndürür.
Gawk, aşağıdaki bit işleme işlevlerini sağlar. Çift duyarlıklı kayan nokta değerlerini uintmax_t tamsayılara dönüştürerek, işlemi yaparak ve ardından sonucu tekrar kayan noktaya çevirerek çalışırlar. Negatif işlenenlerin bu işlevlerden herhangi birine iletilmesi önemli bir hataya neden olur.
Fonksiyonlar:
Bağımsız değişken listesinde sağlanan değerlerin bit düzeyinde VE'sini döndürün. En az iki tane olmalı.
val öğesinin bit düzeyindeki tamamlayıcısını döndürün.
count bit sola kaydırılmış val değerini döndürür.
Bağımsız değişken listesinde sağlanan değerlerin bit düzeyinde VEYA'sını döndürün. En az iki tane olmalı.
count bit sağa kaydırılmış val değerini döndürür.
Bağımsız değişken listesinde sağlanan değerlerin bit düzeyinde XOR'unu döndürün. En az iki tane olmalı.
Aşağıdaki işlevler, bağımsız değişkenleri hakkında türle ilgili bilgiler sağlar.
x bir dizi ise true, aksi takdirde false döndürür.
x türünü gösteren bir dize döndürür. Dize, "array", "number", "regexp", "string", "strnum", "unsigned" veya "undefined" karakterlerinden biri olacaktır.
Aşağıdaki işlevler, çalışma zamanında dizeleri çevirmek için AWK programınız içinden kullanılabilir. Tüm ayrıntılar için bkz. https://www.gnu.org/software/gawk/manual/html_node/I18N-Functions.html#I18N-Functions.
gawk'nin .gmo dosyalarını ``standart'' konumlara yerleştirilemeyecekleri veya yerleştirilemeyecekleri durumlara karşı arayacağı dizini belirtin. domain'in ``bağlı'' olduğu dizini döndürür.
Varsayılan etki alanı, TEXTDOMAIN değeridir. dizin boş dizeyse (""), bu durumda bindtextdomain(), verilen etki alanı için geçerli bağlamayı döndürür.
kategori yerel ayar kategorisi için etki alanı metin alanındaki dize'nin çevirisini döndürün. domain için varsayılan değer, TEXTDOMAIN'in geçerli değeridir. kategori için varsayılan değer "LC_MESSAGES"'dir.
Yerel ayar kategorisi için etki alanı metin alanında dize1 ve dize2'nin çevirisinin sayı için kullanılan çoğul biçimi döndürünkategori. domain için varsayılan değer, TEXTDOMAIN'in geçerli değeridir. kategori için varsayılan değer "LC_MESSAGES"'dir.
Boole türünde özel değerler oluşturabilirsiniz; nasıl çalıştıklarını ve neden var olduklarını öğrenmek için kılavuza bakın.
ifade öğesinin boolean değerine bağlı olarak, ya doğru bir değer ya da yanlış bir değer döndürün. Gerçek değerlerin sayısal değeri birdir. Yanlış değerlerin sayısal değeri sıfırdır.
AWK'daki işlevler aşağıdaki gibi tanımlanır:
işlev adı(parametre listesi) { ifadeler }
İşlevler, kalıplarda veya eylemlerde ifadelerin içinden çağrıldıklarında yürütülür. İşlev çağrısında sağlanan gerçek parametreler, işlevde bildirilen resmi parametreleri somutlaştırmak için kullanılır. Diziler referansa göre iletilir, diğer değişkenler değere göre iletilir.
Yerel değişkenler, parametre listesinde ekstra parametreler olarak bildirilir. Kural, parametre listesindeki fazladan boşluklarla yerel değişkenleri gerçek parametrelerden ayırmaktır. Örneğin:
function f(p, q, a, b) # a and b are local { . . . } /abc/ { . . . ; f(1, 2) ; . . . }
Bir işlev çağrısında sol parantez, araya boşluk bırakmadan işlev adını hemen takip etmek için gereklidir. Bu kısıtlama, yukarıda listelenen yerleşik işlevler için geçerli değildir.
Fonksiyonlar birbirini çağırabilir ve özyinelemeli olabilir. Yerel değişkenler olarak kullanılan işlev parametreleri, işlev çağrıldığında boş dizeye ve sıfır sayısına göre başlatılır.
Bir işlevden bir değer döndürmek için return expr kullanın. Herhangi bir değer sağlanmazsa veya işlev sonunda “falling off” yaparak dönerse, dönüş değeri tanımsızdır.
Fonksiyonlar dolaylı olarak çağrılabilir. Bunu yapmak için, çağrılacak işlevin adını bir dize olarak bir değişkene atayın. Ardından, değişkeni bir işlevin adıymış gibi, önüne bir @ işareti koyarak kullanın, şöyle:
function myfunc() { print "myfunc called" . . . } { . . . the_func = "myfunc" @the_func() # call through the_func to myfunc . . . }
- -lint sağlanmışsa, gawk tanımsız işlevlere yapılan çağrılar hakkında çalışma zamanı yerine ayrıştırma zamanında uyarır. Çalışma zamanında tanımsız bir işlevin çağrılması ölümcül bir hatadır.
@load deyimiyle çalışan gawk yorumlayıcısına C veya C++ ile yazılmış yeni işlevleri dinamik olarak ekleyebilirsiniz. Tüm ayrıntılar bu kılavuz sayfasının kapsamı dışındadır; https://www.gnu.org/software/gawk/manual/html_node/Dynamic-Extensions.html#Dynamic-Extensions'a bakın.
gawk profil oluşturucu iki sinyali kabul eder. SIGUSR1, awkprof.out olan profil dosyasına veya - -profile seçeneğiyle adı verilen herhangi bir dosyaya bir profil ve işlev çağrısı yığını dökmesine neden olur. Daha sonra çalışmaya devam eder. SIGHUP, gawk'in profili ve işlev çağrısı yığınını boşaltmasına ve sonra çıkmasına neden olur.
Dize sabitleri, çift tırnak içine alınmış karakter dizileridir. İngilizce konuşulmayan ortamlarda, AWK programındaki dizeleri yerel doğal dile çeviri gerektiriyor olarak işaretlemek mümkündür. Bu tür diziler, AWK programında başında bir alt çizgi (“_”) ile işaretlenir. Örneğin,
gawk 'BEGIN { print "hello, world" }'her zaman merhaba dünya yazdırır. Ancak,
gawk 'BEGIN { print _"hello, world" }'Fransa'da bonjour, monde yazdırabilir. Yerelleştirilebilir bir AWK programı oluşturma ve çalıştırmayla ilgili adımlar için https://www.gnu.org/software/gawk/manual/html_node/Internationalization.html#Internationalization adresine bakın.
Gawk, POSIX awk için çok fazla sayıda uzantıya sahip. Bunlar https://www.gnu.org/software/gawk/manual/html_node/POSIX_002fGNU.html adresinde açıklanmıştır. - -geleneksel veya - -posix seçenekleriyle gawk çağrılarak tüm uzantılar devre dışı bırakılabilir.
AWKPATH ortam değişkeni, -f, ile adlandırılan dosyaları ararken gawk'nin arama yaptığı dizinlerin bir listesini sağlamak için kullanılabilir. - -file, -i ve - -include seçenekleri ve @include yönergesi. İlk arama başarısız olursa, dosya adına .awk eklendikten sonra yol yeniden aranır.
AWKLIBPATH ortam değişkeni, -l ve ile adlandırılan dosyaları ararken gawk'nin arama yaptığı dizinlerin bir listesini sağlamak için kullanılabilir. - -yükleme seçenekleri.
Varsa, GAWK_PERSIST_FILE ortam değişkeni, kalıcı bellek için yedekleme deposu olarak kullanılacak bir dosyayı belirtir. Bu deneysel bir özelliktir. Ayrıntılar için GAWK: Etkili AWK Programlama'ya bakın.
GAWK_READ_TIMEOUT ortam değişkeni, bir uçbirimden, kanaldan veya soketler dahil iki yönlü iletişimden gelen girdileri okumak için milisaniye cinsinden bir zaman aşımı belirtmek için kullanılabilir.
Soket yoluyla uzak bir ana bilgisayara bağlantı için, GAWK_SOCK_RETRIES yeniden deneme sayısını ve yeniden denemeler arasındaki aralığı GAWK_MSEC_SLEEP kontrol eder. Aralık milisaniye cinsindendir. Uykuda(3)'ü desteklemeyen sistemlerde, değer tam bir saniye sayısına yuvarlanır.
Ortamda POSIXLY_CORRECT varsa, gawk tam olarak - -posix komut satırında belirtilmiş gibi davranır. - -lint belirtilmişse, gawk bu amaçla bir uyarı mesajı verir.
Kullanımdan kaldırılan MPFR moduyla ilgili uyarıyı susturmak için ortamda GAWK_NO_MPFR_WARN öğesini ayarlayın.
exit ifadesi bir değerle birlikte kullanılıyorsa, gawk kendisine verilen sayısal değerle çıkar.
Aksi takdirde, yürütme sırasında herhangi bir sorun yoksa, gawk C sabitinin EXIT_SUCCESS değeriyle çıkar. Bu genellikle sıfırdır.
Bir hata oluşursa, gawk, EXIT_FAILURE C sabitinin değeriyle çıkar. Bu genellikle birdir.
gawk önemli bir hata nedeniyle çıkarsa, çıkış durumu 2'dir. POSIX olmayan sistemlerde bu değer EXIT_FAILURE olarak eşlenebilir.
Bu kılavuz sayfası, gawk, sürüm 5.2'yi belgeler.
UNIX awk'in orijinal sürümü Bell Laboratories'den Alfred Aho, Peter Weinberger ve Brian Kernighan tarafından tasarlanmış ve uygulanmıştır. Brian Kernighan onu korumaya ve geliştirmeye devam ediyor.
Özgür Yazılım Vakfı'ndan Paul Rubin ve Jay Fenlason gawk'ı Yedinci Sürüm UNIX'te dağıtılan orijinal awk sürümüyle uyumlu olacak şekilde yazdı. John Woods bir dizi hata düzeltmesine katkıda bulundu. David Trueman, Arnold Robbins'in katkılarıyla gawk'ı UNIX awk'in yeni sürümüyle uyumlu hale getirdi. Arnold Robbins şu anki koruyucudur.
gawk'a katkıda bulunanların tam listesi ve belgeleri için GAWK: Etkili AWK Programlama'ya bakın.
Bakımcılar ve şu anda hangi bağlantı noktalarının desteklendiği hakkında güncel bilgiler için gawk dağıtımındaki README dosyasına bakın.
gawk'de bir hata bulursanız, bunu bildirmek için lütfen gawkbug(1) programını kullanın.
Bir hatayı bildirmek için tam talimatlar https://www.gnu.org/software/gawk/manual/html_node/Bugs.html adresinde verilmektedir. Lütfen orada verilen talimatları dikkatlice okuyun ve uygulayın. Bu, dahil olan herkes için hata raporlamayı ve çözümü çok daha kolay hale getirecektir. Gerçekten mi.
Komut satırı değişken atama özelliği göz önüne alındığında -F seçeneği gerekli değildir; sadece geriye dönük uyumluluk için kalır.
Bu kılavuz sayfası çok uzun; gawk çok fazla özelliğe sahip.
egrep(1), sed(1), gawkbug(1), printf(3), and strftime(3).
The AWK Programming Language, Alfred V. Aho, Brian W. Kernighan, Peter J. Weinberger, Addison-Wesley, 1988. ISBN 0-201-07981-X.
GAWK: Effective AWK Programming, Edition 5.2, shipped with the gawk source. The current version of this document is available online at https://www.gnu.org/software/gawk/manual.
The GNU gettext documentation, available online at https://www.gnu.org/software/gettext.
Print and sort the login names of all users:
BEGIN { FS = ":" }
{ print $1 | "sort" }
Count lines in a file:
{ nlines++ }
END { print nlines }
Precede each line by its number in the file:
{ print FNR, $0 }
Concatenate and line number (a variation on a theme):
{ print NR, $0 }
Run an external command for particular lines of data:
tail -f access_log |
awk '/myhome.html/ { system("nmap " $1 ">> logdir/myhome.html") }'Brian Kernighan, test etme ve hata ayıklama sırasında değerli yardımlar sağladı. Ona teşekkür ederiz.
Telif hakkı © 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002, 2003, 2004, 2005, 2007, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Özgür Yazılım Vakfı, Inc.
Telif hakkı bildiriminin ve bu izin bildiriminin tüm kopyalarda muhafaza edilmesi koşuluyla, bu kılavuz sayfasının birebir kopyalarının yapılması ve dağıtılması için izin verilir.
Bu paragrafın kaldırılması dışında (bu paragraf basılı kılavuz sayfasıyla ilgili değildir) basılı belgenin bununla aynı kopyalama izni bildirimini taşıması koşuluyla, bu dosyayı troff aracılığıyla işlemek ve sonuçları yazdırmak için izin verilir.
Bu kılavuz sayfasının değiştirilmiş versiyonlarının aynen kopyalama koşulları altında kopyalanması ve dağıtılması için izin verilir, ancak sonuçta elde edilen tüm çalışmanın buna benzer bir izin bildiriminin koşulları altında dağıtılması gerekir.
Bu kılavuz sayfasının başka bir dile kopyalanması ve tercümelerinin, değiştirilmiş versiyonlar için yukarıdaki koşullar altında, bu izin bildiriminin Vakıf tarafından onaylanan bir tercümede belirtilebilmesi dışında, izin verilmektedir.