5.0 AWK'nın Dahili Değişkenlerinde Uzmanlaşma
5.1. Dahili Değişkenlerin Rolü
Dahili değişkenler, AWK'nın kritik bir özelliğidir ve girdi verileri, yürütme ortamı ve programın durumu hakkında bilgilere otomatik erişim sağlar. Bunların kullanımında ustalaşmak, güçlü, özlü ve AWK'ya özgü komut dosyaları yazmak için şarttır.
5.2. Standart AWK Değişkenleri
- ARGC ve ARGV ARGC, komut satırı argümanlarının sayısını içerirken, ARGV ise argümanların kendilerini içeren bir dizidir. ARGV[0]'ın komutun adı olan awk'ı içerdiğine dikkat edin.
- NF (Alan Sayısı) Bu değişken, mevcut kayıttaki toplam alan sayısını tutar. Okunan her kayıt için yeniden hesaplanır.
- NR (Kayıt Numarası) Bu değişken, komut dosyasının başlangıcından bu yana işlenen kayıtların toplam sayısını depolayan küresel bir sayaç görevi görür.
- FNR (Kayıt Dosya Numarası) NR'ye benzer şekilde, FNR de kayıt numarasını saklar, ancak işlenen her yeni giriş dosyası için 1'e sıfırlanır. Bu da onu çoklu dosya işlemleri için paha biçilmez kılar. Örnek olarak, A\nB içeren data1.txt ve C\nD içeren data2.txt olmak üzere iki dosyayı ele alalım.
- Dikkat edin, data2.txt için FNR değeri 1'e sıfırlanırken, NR değeri artmaya devam ediyor.
- FS (Alan Ayırıcı) Giriş kaydındaki alanları ayırmak için kullanılan karakteri veya normal ifadeyi tanımlar. Varsayılan değer boşluktur (bir veya daha fazla boşluk veya sekme).
- RS (Kayıt Ayırıcı) Girişteki kayıtları ayırmak için kullanılan karakteri tanımlar. Varsayılan değer yeni satır karakteridir (\n).
- OFS (Çıkış Alanı Ayırıcı) Birden fazla argümanla `print` ifadesini kullanırken çıktıdaki alanlar arasına yerleştirilecek ayırıcıyı tanımlar. Varsayılan değer tek bir boşluktur.
- ORS (Çıkış Kaydı Ayırıcı) Çıktıdaki her kaydın sonuna yerleştirilecek ayırıcıyı tanımlar. Varsayılan değer yeni satır karakteridir (\n).
- DOSYA ADI Bu değişken, işlenmekte olan mevcut giriş dosyasının adını içerir.
- **$0 ve n** Daha önce belirtildiği gibi, `0` mevcut kaydın tamamını temsil ederken, `n` (örneğin, `1, $2`) o kayıttaki n. alanı temsil eder.
- RSTART & RLENGTH `match()` fonksiyonuyla birlikte kullanılır. Başarılı bir eşleşmeden sonra, `RSTART` eşleşen alt dizenin başlangıç konumunu (indeksini) ve `RLENGTH` ise uzunluğunu tutar.
- CONVFMT & OFMT Bu değişkenler, sayıların metin dizelerine dönüştürülmesi (CONVFMT) ve yazdırma işlemiyle yazdırılan sayıların çıktı biçimini (OFMT) kontrol eder. Her ikisinin de varsayılan değeri %.6g'dir.
- ALT BÖLÜM Bu değişken, çok boyutlu dizileri simüle etmek için kullanılan alt indis ayırıcıyı belirtir. Varsayılan değer, yazdırılamayan \034 karakteridir.
- ÇEVRE Kabuğun ortam değişkenlerine erişim sağlayan ilişkisel bir dizi.
5.3. GNU AWK (GAWK) Özel Değişkenleri
GAWK, kendi bünyesinde bulunan değişkenler kümesi aracılığıyla POSIX standardına çeşitli uzantılar sunmaktadır.
- ARGİND: ARGV dizisinde şu anda işlenmekte olan dosyayı gösteren indeks.
- YOKSAYSıfırdan farklı bir değere ayarlanırsa, tüm normal ifade işlemleri için büyük/küçük harf duyarlılığı olmayan desen eşleştirmeyi etkinleştirir.
- HATAYönlendirme veya close() işlemi başarısız olduğunda, bu değişken sistem bağımlı bir hata mesajı dizesi içerir.
- ALAN GENİŞLİKLERİ: GAWK'a, FS değişkenini kullanmak yerine sabit alan genişliklerine göre kayıtları ayrıştırmasını söyleyen, boşlukla ayrılmış bir sayı listesi.
- tiftikKod denetimi üzerinde dinamik kontrol sağlar. Bu ayarı etkinleştirmek, taşınabilir olmayan veya şüpheli kod yapıları hakkında uyarılar verilmesini sağlar.
- PROSİNFO: Çalışmakta olan süreç hakkında bilgi içeren ilişkisel bir dizi; örneğin, süreç kimliği (PROCINFO["pid"]).
- METİN ALANIUluslararasılaştırma için kullanılır; yerelleştirilmiş program dizelerini almak için metin alanını belirtir.
- BİN MODUPOSIX dışı sistemlerde dosya G/Ç işlemleri için ikili modu belirtmek amacıyla kullanılır.
AWK'nin verileri değişkenler aracılığıyla nasıl sakladığını ve bunlara nasıl erişim sağladığını anladığımıza göre, bir sonraki mantıklı adım bu verileri işlemek için kullanılan operatörleri incelemektir.