AWK - Hızlı Kılavuz
AWK, yorumlanmış bir programlama dilidir. Çok güçlüdür ve metin işleme için özel olarak tasarlanmıştır. Adı, yazarlarının soyadlarından türetilmiştir -Alfred Aho, Peter Weinberger, and Brian Kernighan.
GNU / Linux'un dağıttığı AWK sürümü, Özgür Yazılım Vakfı (FSF) tarafından yazılır ve sürdürülür; genellikle şu şekilde anılırGNU AWK.
AWK Türleri
Aşağıdakiler AWK'nın varyantlarıdır -
AWK - AT & T Laboratuvarı'ndan orijinal AWK.
NAWK - AT & T Laboratuvarından daha yeni ve geliştirilmiş AWK sürümü.
GAWK- GNU AWK'dır. Tüm GNU / Linux dağıtımları GAWK ile gönderilir. AWK ve NAWK ile tamamen uyumludur.
AWK'nın Tipik Kullanımları
AWK ile sayısız görev yapılabilir. Aşağıda bunlardan sadece birkaçı listelenmiştir -
- Metin işleme,
- Formatlı metin raporları üretmek,
- Aritmetik işlemler yapmak,
- Dize işlemlerini gerçekleştirme ve çok daha fazlası.
Bu bölüm, GNU / Linux sisteminizde AWK ortamını nasıl kuracağınızı açıklar.
Paket Yöneticisini Kullanarak Kurulum
Genellikle AWK, çoğu GNU / Linux dağıtımında varsayılan olarak mevcuttur. Kullanabilirsinizwhichsisteminizde olup olmadığını kontrol etmek için komut. AWK'nız yoksa, Advance Package Tool'u kullanarak Debian tabanlı GNU / Linux üzerine kurun.(APT) aşağıdaki gibi paket yöneticisi -
[jeryy]$ sudo apt-get update [jeryy]$ sudo apt-get install gawk
Benzer şekilde, RPM tabanlı GNU / Linux'a AWK kurmak için Yellowdog Updator Modifier'ı kullanın yum aşağıdaki gibi paket yöneticisi -
[root]# yum install gawk
Kurulumdan sonra, AWK'ye komut satırı aracılığıyla erişilebildiğinden emin olun.
[jerry]$ which awk
Yukarıdaki kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
/usr/bin/awk
Kaynak Koddan Kurulum
GNU AWK, GNU projesinin bir parçası olduğundan, kaynak kodu ücretsiz olarak indirilebilir. Paket yöneticisini kullanarak AWK'nın nasıl kurulacağını zaten görmüştük. Şimdi AWK'nın kaynak kodundan nasıl kurulacağını anlayalım.
Aşağıdaki kurulum, herhangi bir GNU / Linux yazılımına ve ücretsiz olarak kullanılabilen diğer programların çoğuna uygulanabilir. İşte kurulum adımları -
Step 1- Kaynak kodunu özgün bir yerden indirin. Komut satırı yardımcı programıwget bu amaca hizmet eder.
[jerry]$ wget http://ftp.gnu.org/gnu/gawk/gawk-4.1.1.tar.xz
Step 2 - İndirilen kaynak kodunu açın ve çıkarın.
[jerry]$ tar xvf gawk-4.1.1.tar.xz
Step 3 - Dizine geçin ve configure'ü çalıştırın.
[jerry]$ ./configure
Step 4 - Başarılı bir şekilde tamamlandıktan sonra, configureMakefile oluşturur. Kaynak kodunu derlemek için birmake komut.
[jerry]$ make
Step 5- Yapının temiz olduğundan emin olmak için test paketini çalıştırabilirsiniz. Bu, isteğe bağlı bir adımdır.
[jerry]$ make check
Step 6- Son olarak, AWK'yi kurun. Süper kullanıcı ayrıcalıklarına sahip olduğunuzdan emin olun.
[jerry]$ sudo make install
İşte bu! AWK'yi başarıyla derlediniz ve yüklediniz. Çalıştırarak doğrulayın.awk aşağıdaki gibi komut -
[jerry]$ which awk
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
/usr/bin/awk
Uzman bir AWK programcısı olmak için, onun içsel özelliklerini bilmeniz gerekir. AWK basit bir iş akışını izler - Oku, Yürüt ve Tekrarla. Aşağıdaki şema AWK'nın iş akışını göstermektedir -
Okuyun
AWK, giriş akışından (dosya, boru veya stdin) bir satırı okur ve bunu bellekte depolar.
Yürüt
Tüm AWK komutları girişe sıralı olarak uygulanır. Varsayılan olarak AWK her satırda komutları yürütür. Kalıplar sağlayarak bunu sınırlayabiliriz.
Tekrar et
Bu işlem, dosya sonuna ulaşıncaya kadar tekrar eder.
Program Yapısı
Şimdi AWK'nın program yapısını anlayalım.
BEGIN bloğu
BEGIN bloğunun sözdizimi aşağıdaki gibidir -
Syntax
BEGIN {awk-commands}
BEGIN bloğu, program başlangıcında yürütülür. Yalnızca bir kez çalıştırılır. Bu, değişkenleri başlatmak için iyi bir yerdir. BEGIN bir AWK anahtar kelimesidir ve bu nedenle büyük harfle yazılmalıdır. Lütfen bu bloğun isteğe bağlı olduğunu unutmayın.
Vücut Bloğu
Gövde bloğunun sözdizimi aşağıdaki gibidir -
Syntax
/pattern/ {awk-commands}
Gövde bloğu, her giriş satırına AWK komutları uygular. Varsayılan olarak, AWK her satırda komutları yürütür. Kalıplar sağlayarak bunu sınırlayabiliriz. Gövde bloğu için anahtar sözcük olmadığını unutmayın.
END Bloğu
END bloğunun sözdizimi aşağıdaki gibidir -
Syntax
END {awk-commands}
END bloğu programın sonunda yürütülür. END bir AWK anahtar kelimesidir ve bu nedenle büyük harfle yazılmalıdır. Lütfen bu bloğun isteğe bağlı olduğunu unutmayın.
Bir dosya oluşturalım marks.txt seri numarasını, öğrencinin adını, konu adını ve elde edilen notların sayısını içerir.
1) Amit Physics 80
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
Şimdi AWK betiğini kullanarak dosya içeriklerini başlık ile görüntüleyelim.
Example
[jerry]$ awk 'BEGIN{printf "Sr No\tName\tSub\tMarks\n"} {print}' marks.txt
Bu kod çalıştırıldığında, aşağıdaki sonucu verir -
Output
Sr No Name Sub Marks
1) Amit Physics 80
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
Başlangıçta, AWK, BEGIN bloğundan başlığı yazdırır. Daha sonra gövde bloğunda, bir dosyadan bir satır okur ve yalnızca içeriği standart çıktı akışına yazdıran AWK'nın yazdırma komutunu yürütür. Bu işlem, dosya sonuna ulaşıncaya kadar tekrar eder.
AWK'nın kullanımı kolaydır. AWK komutlarını doğrudan komut satırından veya AWK komutlarını içeren bir metin dosyası biçiminde sağlayabiliriz.
AWK Komut Satırı
Gösterildiği gibi komut satırında tek tırnak içinde bir AWK komutu belirleyebiliriz -
awk [options] file ...
Misal
Bir metin dosyası düşünün marks.txt aşağıdaki içerikle -
1) Amit Physics 80
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
AWK kullanarak dosyanın tüm içeriğini aşağıdaki gibi görüntüleyelim -
Example
[jerry]$ awk '{print}' marks.txt
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Output
1) Amit Physics 80
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
AWK Program Dosyası
AWK komutlarını gösterildiği gibi bir komut dosyasında sağlayabiliriz -
awk [options] -f file ....
Önce bir metin dosyası oluşturun command.awk AWK komutunu içeren, aşağıda gösterildiği gibi -
{print}
Artık AWK'ya metin dosyasından komutları okuması ve eylemi gerçekleştirmesi talimatını verebiliriz. Burada, yukarıdaki örnekte gösterilenle aynı sonucu elde ediyoruz.
Example
[jerry]$ awk -f command.awk marks.txt
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Output
1) Amit Physics 80
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
AWK Standart Seçenekleri
AWK, komut satırından sağlanabilen aşağıdaki standart seçenekleri destekler.
-V seçeneği
Bu seçenek, bir değişkene bir değer atar. Programın yürütülmesinden önce atamaya izin verir. Aşağıdaki örnek -v seçeneğinin kullanımını açıklamaktadır.
Example
[jerry]$ awk -v name=Jerry 'BEGIN{printf "Name = %s\n", name}'
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Output
Name = Jerry
--Dump-değişkenler [= dosya] seçeneği
Global değişkenlerin sıralı bir listesini ve bunların son değerlerini dosyaya yazdırır. Varsayılan dosyaawkvars.out.
Example
[jerry]$ awk --dump-variables '' [jerry]$ cat awkvars.out
Yukarıdaki kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Output
ARGC: 1
ARGIND: 0
ARGV: array, 1 elements
BINMODE: 0
CONVFMT: "%.6g"
ERRNO: ""
FIELDWIDTHS: ""
FILENAME: ""
FNR: 0
FPAT: "[^[:space:]]+"
FS: " "
IGNORECASE: 0
LINT: 0
NF: 0
NR: 0
OFMT: "%.6g"
OFS: " "
ORS: "\n"
RLENGTH: 0
RS: "\n"
RSTART: 0
RT: ""
SUBSEP: "\034"
TEXTDOMAIN: "messages"
--Help seçeneği
Bu seçenek, yardım mesajını standart çıktıya yazdırır.
Example
[jerry]$ awk --help
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Output
Usage: awk [POSIX or GNU style options] -f progfile [--] file ...
Usage: awk [POSIX or GNU style options] [--] 'program' file ...
POSIX options : GNU long options: (standard)
-f progfile --file=progfile
-F fs --field-separator=fs
-v var=val --assign=var=val
Short options : GNU long options: (extensions)
-b --characters-as-bytes
-c --traditional
-C --copyright
-d[file] --dump-variables[=file]
-e 'program-text' --source='program-text'
-E file --exec=file
-g --gen-pot
-h --help
-L [fatal] --lint[=fatal]
-n --non-decimal-data
-N --use-lc-numeric
-O --optimize
-p[file] --profile[=file]
-P --posix
-r --re-interval
-S --sandbox
-t --lint-old
-V --version
--Lint [= ölümcül] seçeneği
Bu seçenek, taşınabilir olmayan veya şüpheli yapıların kontrol edilmesini sağlar. Bir tartışma olduğundafatalsağlanırsa, uyarı mesajlarını hata olarak değerlendirir. Aşağıdaki örnek bunu göstermektedir -
Example
[jerry]$ awk --lint '' /bin/ls
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Output
awk: cmd. line:1: warning: empty program text on command line
awk: cmd. line:1: warning: source file does not end in newline
awk: warning: no program text at all!
--Posix seçeneği
Bu seçenek, tüm yaygın ve gawk'a özgü uzantıların devre dışı bırakıldığı katı POSIX uyumluluğunu etkinleştirir.
--Profile [= dosya] seçeneği
Bu seçenek, programın güzel basılmış bir sürümünü dosyada oluşturur. Varsayılan dosyaawkprof.out. Aşağıdaki basit örnek bunu göstermektedir -
Example
[jerry]$ awk --profile 'BEGIN{printf"---|Header|--\n"} {print} END{printf"---|Footer|---\n"}' marks.txt > /dev/null [jerry]$ cat awkprof.out
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Output
# gawk profile, created Sun Oct 26 19:50:48 2014
# BEGIN block(s)
BEGIN {
printf "---|Header|--\n"
}
# Rule(s) {
print $0
}
# END block(s)
END {
printf "---|Footer|---\n"
}
Geleneksel seçenek
Bu seçenek, gawk'a özgü tüm uzantıları devre dışı bırakır.
--Version seçeneği
Bu seçenek, AWK programının sürüm bilgisini görüntüler.
Example
[jerry]$ awk --version
Bu kod çalıştırıldığında, aşağıdaki sonucu verir -
Output
GNU Awk 4.0.1
Copyright (C) 1989, 1991-2012 Free Software Foundation.
Bu bölüm birkaç yararlı AWK komutunu ve bunların uygun örneklerini açıklamaktadır. Bir metin dosyası düşününmarks.txt aşağıdaki içerikle işlenecek -
1) Amit Physics 80
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
Sütun veya Alan Yazdırma
AWK'ya giriş alanından yalnızca belirli sütunları yazdırması talimatını verebilirsiniz. Aşağıdaki örnek bunu göstermektedir -
Misal
[jerry]$ awk '{print $3 "\t" $4}' marks.txt
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Çıktı
Physics 80
Maths 90
Biology 87
English 85
History 89
Dosyanın içinde marks.txtüçüncü sütun konu adını içerir ve dördüncü sütun belirli bir konuda elde edilen işaretleri içerir. AWK print komutunu kullanarak bu iki sütunu yazdıralım. Yukarıdaki örnekte,$3 and $4 giriş kaydından sırasıyla üçüncü ve dördüncü alanları temsil eder.
Tüm Satırları Yazdırma
Varsayılan olarak, AWK desenle eşleşen tüm satırları yazdırır.
Misal
[jerry]$ awk '/a/ {print $0}' marks.txt
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Çıktı
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
Yukarıdaki örnekte, form kalıbı arıyoruz a. Bir model eşleşmesi başarılı olduğunda, gövde bloğundan bir komut yürütür. Bir gövde bloğunun yokluğunda - kaydı yazdıran varsayılan eylem gerçekleştirilir. Dolayısıyla, aşağıdaki komut aynı sonucu verir -
Misal
[jerry]$ awk '/a/' marks.txt
Sütunları Desene Göre Yazdırma
Bir kalıp eşleşmesi başarılı olduğunda, AWK varsayılan olarak tüm kaydı yazdırır. Ancak AWK'ye yalnızca belirli alanları yazdırması talimatını verebilirsiniz. Örneğin, aşağıdaki örnek, bir desen eşleşmesi başarılı olduğunda üçüncü ve dördüncü alanı yazdırır.
Misal
[jerry]$ awk '/a/ {print $3 "\t" $4}' marks.txt
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Çıktı
Maths 90
Biology 87
English 85
History 89
Herhangi Bir Sırayla Sütun Yazdırma
Sütunları istediğiniz sırada yazdırabilirsiniz. Örneğin, aşağıdaki örnek, dördüncü sütunu ve ardından üçüncü sütunu yazdırır.
Misal
[jerry]$ awk '/a/ {print $4 "\t" $3}' marks.txt
Yukarıdaki kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Çıktı
90 Maths
87 Biology
85 English
89 History
Eşleşen Deseni Sayma ve Yazdırma
Bir desen eşleşmesinin başarılı olduğu satırların sayısını sayabileceğiniz ve yazdırabileceğiniz bir örnek görelim.
Misal
[jerry]$ awk '/a/{++cnt} END {print "Count = ", cnt}' marks.txt
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Çıktı
Count = 4
Bu örnekte, bir desen eşleşmesi başarılı olduğunda counter değerini artırıyoruz ve bu değeri END bloğuna yazdırıyoruz. Diğer programlama dillerinden farklı olarak, bir değişkeni kullanmadan önce bildirmeye gerek olmadığını unutmayın.
18 Karakterden Fazla Satır Yazdırma
Yalnızca 18'den fazla karakter içeren satırları yazdıralım.
Misal
[jerry]$ awk 'length($0) > 18' marks.txt
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Çıktı
3) Shyam Biology 87
4) Kedar English 85
AWK yerleşik bir length dizenin uzunluğunu döndüren işlev. $0değişken tüm satırı depolar ve bir gövde bloğu olmadığında, varsayılan eylem, yani yazdırma eylemi gerçekleştirilir. Bu nedenle, bir satırda 18'den fazla karakter varsa, karşılaştırma doğru sonuçlanır ve satır yazdırılır.
AWK, birkaç yerleşik değişken sağlar. AWK betikleri yazarken önemli bir rol oynarlar. Bu bölüm yerleşik değişkenlerin kullanımını gösterir.
Standart AWK değişkenleri
Standart AWK değişkenleri aşağıda tartışılmaktadır.
ARGC
Komut satırında sağlanan argüman sayısını ifade eder.
Example
[jerry]$ awk 'BEGIN {print "Arguments =", ARGC}' One Two Three Four
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Output
Arguments = 5
Ama sadece 4 bağımsız değişken geçtiğinizde AWK neden 5 gösteriyor? Şüphenizi gidermek için aşağıdaki örneği kontrol edin.
ARGV
Komut satırı argümanlarını depolayan bir dizidir. Dizinin geçerli dizini 0 ile ARGC-1 arasındadır.
Example
[jerry]$ awk 'BEGIN {
for (i = 0; i < ARGC - 1; ++i) {
printf "ARGV[%d] = %s\n", i, ARGV[i]
}
}' one two three four
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Output
ARGV[0] = awk
ARGV[1] = one
ARGV[2] = two
ARGV[3] = three
CONVFMT
Sayılar için dönüştürme biçimini temsil eder. Varsayılan değeri%.6g.
Example
[jerry]$ awk 'BEGIN { print "Conversion Format =", CONVFMT }'
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Output
Conversion Format = %.6g
ÇEVRE
İlişkili bir ortam değişkenleri dizisidir.
Example
[jerry]$ awk 'BEGIN { print ENVIRON["USER"] }'
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Output
jerry
Diğer ortam değişkenlerinin adlarını bulmak için şunu kullanın: env komut.
DOSYA ADI
Mevcut dosya adını temsil eder.
Example
[jerry]$ awk 'END {print FILENAME}' marks.txt
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Output
marks.txt
Lütfen FILENAME'in BEGIN bloğunda tanımsız olduğunu unutmayın.
FS
(Giriş) alan ayırıcısını temsil eder ve varsayılan değeri boşluktur. Bunu kullanarak da değiştirebilirsiniz-F komut satırı seçeneği.
Example
[jerry]$ awk 'BEGIN {print "FS = " FS}' | cat -vte
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Output
FS = $
NF
Geçerli kayıttaki alanların sayısını temsil eder. Örneğin, aşağıdaki örnek yalnızca ikiden fazla alan içeren satırları yazdırır.
Example
[jerry]$ echo -e "One Two\nOne Two Three\nOne Two Three Four" | awk 'NF > 2'
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Output
One Two Three
One Two Three Four
NR
Mevcut kaydın numarasını temsil eder. Örneğin, aşağıdaki örnek, geçerli kayıt numarası üçten azsa kaydı yazdırır.
Example
[jerry]$ echo -e "One Two\nOne Two Three\nOne Two Three Four" | awk 'NR < 3'
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Output
One Two
One Two Three
FNR
NR'ye benzer, ancak mevcut dosyaya göre. AWK birden fazla dosya üzerinde çalışırken kullanışlıdır. FNR değeri yeni dosyayla sıfırlanır.
OFMT
Çıktı formatı numarasını temsil eder ve varsayılan değeri %.6g.
Example
[jerry]$ awk 'BEGIN {print "OFMT = " OFMT}'
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Output
OFMT = %.6g
OFS
Çıktı alanı ayırıcısını temsil eder ve varsayılan değeri boşluktur.
Example
[jerry]$ awk 'BEGIN {print "OFS = " OFS}' | cat -vte
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Output
OFS = $
ORS
Çıktı kaydı ayırıcısını temsil eder ve varsayılan değeri yeni satırdır.
Example
[jerry]$ awk 'BEGIN {print "ORS = " ORS}' | cat -vte
Yukarıdaki kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Output
ORS = $
$
UZUNLUK
Eşleşen dizenin uzunluğunu temsil eder. matchişlevi. AWK'nin eşleme işlevi, girdi dizesinde belirli bir dizeyi arar.
Example
[jerry]$ awk 'BEGIN { if (match("One Two Three", "re")) { print RLENGTH } }'
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Output
2
RS
(Giriş) kayıt ayırıcısını temsil eder ve varsayılan değeri yeni satırdır.
Example
[jerry]$ awk 'BEGIN {print "RS = " RS}' | cat -vte
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Output
RS = $
$
YENİDEN BAŞLAT
İle eşleşen dizedeki ilk konumu temsil eder match işlevi.
Example
[jerry]$ awk 'BEGIN { if (match("One Two Three", "Thre")) { print RSTART } }'
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Output
9
SUBSEP
Dizi alt dizeleri için ayırıcı karakteri temsil eder ve varsayılan değeri \034.
Example
[jerry]$ awk 'BEGIN { print "SUBSEP = " SUBSEP }' | cat -vte
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Output
SUBSEP = ^\$
0 $
Tüm girdi kaydını temsil eder.
Example
[jerry]$ awk '{print $0}' marks.txt
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Output
1) Amit Physics 80
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
$ n
Alanların FS ile ayrıldığı geçerli kayıttaki n'inci alanı temsil eder .
Example
[jerry]$ awk '{print $3 "\t" $4}' marks.txt
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Output
Physics 80
Maths 90
Biology 87
English 85
History 89
GNU AWK'ya Özgü Değişkenler
GNU AWK'ya özgü değişkenler aşağıdaki gibidir -
ARGIND
İşlenmekte olan mevcut dosyanın ARGV'deki dizinini temsil eder.
Example
[jerry]$ awk '{
print "ARGIND = ", ARGIND; print "Filename = ", ARGV[ARGIND]
}' junk1 junk2 junk3
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Output
ARGIND = 1
Filename = junk1
ARGIND = 2
Filename = junk2
ARGIND = 3
Filename = junk3
BINMODE
POSIX olmayan sistemlerdeki tüm dosya G / Ç'leri için ikili modu belirtmek için kullanılır. 1, 2 veya 3 sayısal değerleri, sırasıyla girdi dosyalarının, çıktı dosyalarının veya tüm dosyaların ikili G / Ç kullanması gerektiğini belirtir. Dize değerlerir veya wsırasıyla girdi dosyalarının veya çıktı dosyalarının ikili G / Ç kullanması gerektiğini belirtin. Dize değerlerirw veya wr tüm dosyaların ikili G / Ç kullanması gerektiğini belirtin.
ERRNO
Bir dize, bir yeniden yönlendirme başarısız olduğunda bir hatayı gösterir getline ya da eğer close çağrı başarısız.
Example
[jerry]$ awk 'BEGIN { ret = getline < "junk.txt"; if (ret == -1) print "Error:", ERRNO }'
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Output
Error: No such file or directory
ALAN GENİŞLİKLERİ
Alan genişlikleri değişkeninin boşlukla ayrılmış bir listesi ayarlanır, GAWK, FS değişkeninin değerini alan ayırıcı olarak kullanmak yerine girişi sabit genişlikte alanlara ayrıştırır.
IGNORECASE
Bu değişken ayarlandığında, GAWK büyük / küçük harfe duyarlı olmaz. Aşağıdaki örnek bunu göstermektedir -
Example
[jerry]$ awk 'BEGIN{IGNORECASE = 1} /amit/' marks.txt
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Output
1) Amit Physics 80
LINT
Dinamik kontrol sağlar. --lintGAWK programından seçenek. Bu değişken ayarlandığında, GAWK tüy bırakma uyarıları yazdırır. Ölümcül dize değeri atandığında, tüysüz uyarılar ölümcül hatalara dönüşür.--lint=fatal.
Example
[jerry]$ awk 'BEGIN {LINT = 1; a}'
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Output
awk: cmd. line:1: warning: reference to uninitialized variable `a'
awk: cmd. line:1: warning: statement has no effect
PROCINFO
Bu, gerçek ve etkili UID numaraları, işlem kimlik numarası vb. Gibi işlemle ilgili bilgileri içeren ilişkilendirilebilir bir dizidir.
Example
[jerry]$ awk 'BEGIN { print PROCINFO["pid"] }'
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Output
4316
TEXTDOMAIN
AWK programının metin alanını temsil eder. Programın dizgilerinin yerelleştirilmiş çevirilerini bulmak için kullanılır.
Example
[jerry]$ awk 'BEGIN { print TEXTDOMAIN }'
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Output
messages
Yukarıdaki çıktı, nedeniyle İngilizce metni gösterir. en_IN yerel ayar
Diğer programlama dilleri gibi AWK da geniş bir operatör kümesi sağlar. Bu bölüm AWK operatörlerini uygun örneklerle açıklamaktadır.
S.No. | Operatörler ve Açıklama |
---|---|
1 | Aritmetik operatörler AWK, aşağıdaki aritmetik operatörleri destekler. |
2 | Arttırma ve Azaltma Operatörleri AWK, aşağıdaki artırma ve azaltma operatörlerini destekler. |
3 | Atama Operatörleri AWK, aşağıdaki atama operatörlerini destekler. |
4 | İlişkisel Operatörler AWK, aşağıdaki ilişkisel operatörleri destekler. |
5 | Mantıksal operatörler AWK, aşağıdaki mantıksal operatörleri destekler. |
6 | Üçlü operatör Üçlü operatör kullanarak bir koşul ifadesini kolayca uygulayabiliriz. |
7 | Tekli Operatörler AWK, aşağıdaki tekli operatörleri destekler. |
8 | Üstel Operatörler İki üstel operatör biçimi vardır. |
9 | Dize Birleştirme Operatörü Boşluk, iki dizeyi birleştiren bir dize birleştirme operatörüdür. |
10 | Dizi Üyelik Operatörü Tarafından temsil edilmektedir in. Dizi elemanlarına erişilirken kullanılır. |
11 | Normal İfade Operatörleri Bu örnek, normal ifade operatörlerinin iki biçimini açıklar. |
AWK, normal ifadeleri işlemede çok güçlü ve etkilidir. Basit normal ifadelerle bir dizi karmaşık görev çözülebilir. Herhangi bir komut satırı uzmanı, normal ifadelerin gücünü bilir.
Bu bölüm, uygun örneklerle standart normal ifadeleri kapsar.
Nokta
Satır sonu karakteri dışında herhangi bir tek karakterle eşleşir. Örneğin, aşağıdaki örnek eşleşirfin, fun, fan vb.
Misal
[jerry]$ echo -e "cat\nbat\nfun\nfin\nfan" | awk '/f.n/'
Yukarıdaki kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Çıktı
fun
fin
fan
Satırın başlangıcı
Satırın başlangıcıyla eşleşiyor. Örneğin, aşağıdaki örnek, desen ile başlayan tüm satırları yazdırır.The.
Misal
[jerry]$ echo -e "This\nThat\nThere\nTheir\nthese" | awk '/^The/'
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Çıktı
There
Their
Yolun sonu
Satırın sonuyla eşleşiyor. Örneğin, aşağıdaki örnek harfle biten satırları yazdırırn.
Misal
[jerry]$ echo -e "knife\nknow\nfun\nfin\nfan\nnine" | awk '/n$/'
Çıktı
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
fun
fin
fan
Karakter kümesini eşleştir
Birkaç karakterden yalnızca birini eşleştirmek için kullanılır. Örneğin, aşağıdaki örnek desenle eşleşirCall ve Tall Ama değil Ball.
Misal
[jerry]$ echo -e "Call\nTall\nBall" | awk '/[CT]all/'
Çıktı
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Call
Tall
Özel set
Özel kümede, kırat köşeli parantez içindeki karakter kümesini geçersiz kılar. Örneğin, aşağıdaki örnek yalnızcaBall.
Misal
[jerry]$ echo -e "Call\nTall\nBall" | awk '/[^CT]all/'
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Çıktı
Ball
Değişiklik
Dikey çubuk, normal ifadelerin mantıksal olarak OR'lanmasına izin verir. Örneğin aşağıdaki örnek,Ball ve Call.
Misal
[jerry]$ echo -e "Call\nTall\nBall\nSmall\nShall" | awk '/Call|Ball/'
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Çıktı
Call
Ball
Sıfır veya Bir Oluşum
Önceki karakterin sıfır veya bir oluşumuyla eşleşir. Örneğin, aşağıdaki örnek eşleşirColour Hem de Color. Biz yaptıku isteğe bağlı bir karakter olarak kullanarak ?.
Misal
[jerry]$ echo -e "Colour\nColor" | awk '/Colou?r/'
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Çıktı
Colour
Color
Sıfır veya Daha Fazla Oluşum
Önceki karakterin sıfır veya daha fazla oluşumuyla eşleşir. Örneğin, aşağıdaki örnek eşleşirca, cat, catt, ve bunun gibi.
Misal
[jerry]$ echo -e "ca\ncat\ncatt" | awk '/cat*/'
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Çıktı
ca
cat
catt
Bir veya Daha Fazla Oluşum
Önceki karakterin bir veya daha fazla oluşumuyla eşleşir. Örneğin aşağıdaki örnek, bir veya daha fazla oluşumla eşleşir2.
Misal
[jerry]$ echo -e "111\n22\n123\n234\n456\n222" | awk '/2+/'
Yukarıdaki kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Çıktı
22
123
234
222
Gruplama
Parentheses ()gruplama ve karakter için kullanılır | alternatifler için kullanılır. Örneğin, aşağıdaki normal ifade, aşağıdakilerden birini içeren satırlarla eşleşir:Apple Juice or Apple Cake.
Misal
[jerry]$ echo -e "Apple Juice\nApple Pie\nApple Tart\nApple Cake" | awk
'/Apple (Juice|Cake)/'
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Çıktı
Apple Juice
Apple Cake
AWK'nın ilişkilendirilebilir dizileri vardır ve bununla ilgili en iyi şeylerden biri - dizinlerin sürekli sayı kümesi olması gerekmez; dizi dizini olarak dizeyi veya sayıyı kullanabilirsiniz. Ayrıca, bir dizinin boyutunu önceden bildirmeye gerek yoktur - diziler çalışma zamanında genişleyebilir / küçülebilir.
Sözdizimi aşağıdaki gibidir -
Sözdizimi
array_name[index] = value
Nerede array_name dizinin adıdır index dizi indeksi ve value dizinin öğesine atanan herhangi bir değerdir.
Dizi Oluşturma
Dizi hakkında daha fazla bilgi edinmek için, bir dizinin öğelerini oluşturalım ve bunlara erişelim.
Misal
[jerry]$ awk 'BEGIN {
fruits["mango"] = "yellow";
fruits["orange"] = "orange"
print fruits["orange"] "\n" fruits["mango"]
}'
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Çıktı
orange
yellow
Yukarıdaki örnekte, diziyi şu şekilde bildiriyoruz: fruitsindeksi meyve adı ve değeri meyvenin rengidir. Dizi elemanlarına erişmek için kullanıyoruzarray_name[index] biçim.
Dizi Öğelerini Silme
Ekleme için atama operatörü kullandık. Benzer şekilde kullanabilirizdeletediziden bir öğeyi kaldırmak için ifade. Delete ifadesinin sözdizimi aşağıdaki gibidir -
Sözdizimi
delete array_name[index]
Aşağıdaki örnek, öğeyi siler orange. Dolayısıyla komut herhangi bir çıktı göstermez.
Misal
[jerry]$ awk 'BEGIN {
fruits["mango"] = "yellow";
fruits["orange"] = "orange";
delete fruits["orange"];
print fruits["orange"]
}'
Çok Boyutlu diziler
AWK yalnızca tek boyutlu dizileri destekler. Ancak tek boyutlu dizinin kendisini kullanarak çok boyutlu bir diziyi kolayca simüle edebilirsiniz.
Örneğin, aşağıda verilen 3x3 iki boyutlu bir dizidir -
100 200 300
400 500 600
700 800 900
Yukarıdaki örnekte, dizi [0] [0] 100, dizi [0] [1] 200 depolar vb. [0] [0] dizi konumunda 100 depolamak için aşağıdaki sözdizimini kullanabiliriz -
Sözdizimi
array["0,0"] = 100
Biz verdik 0,0indeks olarak bunlar iki indeks değildir. Gerçekte, dizeyle yalnızca bir dizindir0,0.
Aşağıdaki örnek, 2 boyutlu bir diziyi simüle eder -
Misal
[jerry]$ awk 'BEGIN {
array["0,0"] = 100;
array["0,1"] = 200;
array["0,2"] = 300;
array["1,0"] = 400;
array["1,1"] = 500;
array["1,2"] = 600;
# print array elements
print "array[0,0] = " array["0,0"];
print "array[0,1] = " array["0,1"];
print "array[0,2] = " array["0,2"];
print "array[1,0] = " array["1,0"];
print "array[1,1] = " array["1,1"];
print "array[1,2] = " array["1,2"];
}'
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Çıktı
array[0,0] = 100
array[0,1] = 200
array[0,2] = 300
array[1,0] = 400
array[1,1] = 500
array[1,2] = 600
Bir dizi üzerinde, öğelerini / dizinlerini sıralama gibi çeşitli işlemler de gerçekleştirebilirsiniz. Bu amaçla kullanabilirsinizassort ve asorti fonksiyonlar
Diğer programlama dilleri gibi AWK da bir programın akışını kontrol etmek için koşullu ifadeler sağlar. Bu bölüm AWK'nın kontrol ifadelerini uygun örneklerle açıklamaktadır.
If ifadesi
Sadece durumu test eder ve duruma bağlı olarak belirli eylemleri gerçekleştirir. Aşağıda verilen sözdizimiif ifade -
Sözdizimi
if (condition)
action
Birden çok eylemi gerçekleştirmek için aşağıda verildiği gibi bir çift küme parantezi de kullanabiliriz -
Sözdizimi
if (condition) {
action-1
action-1
.
.
action-n
}
Örneğin, aşağıdaki örnek bir sayının çift olup olmadığını kontrol eder -
Misal
[jerry]$ awk 'BEGIN {num = 10; if (num % 2 == 0) printf "%d is even number.\n", num }'
Yukarıdaki kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Çıktı
10 is even number.
Aksi takdirde İfadesi
İçinde if-else sözdizimi, bir koşul yanlış olduğunda gerçekleştirilecek eylemlerin bir listesini sağlayabiliriz.
Sözdizimi if-else ifade aşağıdaki gibidir -
Sözdizimi
if (condition)
action-1
else
action-2
Yukarıdaki söz diziminde, koşul doğru olarak değerlendirildiğinde eylem-1 gerçekleştirilir ve koşul yanlış olarak değerlendirildiğinde eylem-2 gerçekleştirilir. Örneğin, aşağıdaki örnek bir sayının çift olup olmadığını kontrol eder -
Misal
[jerry]$ awk 'BEGIN {
num = 11; if (num % 2 == 0) printf "%d is even number.\n", num;
else printf "%d is odd number.\n", num
}'
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Çıktı
11 is odd number.
If-Else-If Merdiveni
Kolayca oluşturabiliriz if-else-if çoklu kullanarak merdiven if-elseifadeler. Aşağıdaki örnek bunu göstermektedir -
Misal
[jerry]$ awk 'BEGIN {
a = 30;
if (a==10)
print "a = 10";
else if (a == 20)
print "a = 20";
else if (a == 30)
print "a = 30";
}'
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Çıktı
a = 30
Bu bölüm AWK döngülerini uygun örneklerle açıklamaktadır. Döngüler, bir dizi eylemi tekrar eden bir şekilde yürütmek için kullanılır. Döngü yürütme, döngü koşulu doğru olduğu sürece devam eder.
Döngü için
Sözdizimi for döngü -
Sözdizimi
for (initialization; condition; increment/decrement)
action
Başlangıçta forifadesi başlatma eylemini gerçekleştirir, ardından koşulu kontrol eder. Koşul doğruysa, eylemler gerçekleştirir, ardından artırma veya azaltma işlemi gerçekleştirir. Koşul doğru olduğu sürece döngü yürütme devam eder. Örneğin, aşağıdaki örnek 1'den 5'e kadar yazdırır.for döngü -
Misal
[jerry]$ awk 'BEGIN { for (i = 1; i <= 5; ++i) print i }'
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Çıktı
1
2
3
4
5
Döngü sırasında
whiledöngü, belirli bir mantıksal koşul doğru olarak değerlendirilene kadar eylemi yürütmeye devam eder. İşte sözdizimiwhile döngü -
Sözdizimi
while (condition)
action
AWK önce durumu kontrol eder; koşul doğruysa, eylemi yürütür. Döngü koşulu doğru olarak değerlendirildiği sürece bu süreç tekrar eder. Örneğin, aşağıdaki örnek 1'den 5'e kadar yazdırır.while döngü -
Misal
[jerry]$ awk 'BEGIN {i = 1; while (i < 6) { print i; ++i } }'
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Çıktı
1
2
3
4
5
Do-While Döngüsü
do-whiledöngüsü, döngünün sonunda test koşulunun değerlendirilmesinin dışında while döngüsüne benzer. İşte sözdizimido-whiledöngü -
Sözdizimi
do
action
while (condition)
İçinde do-whiledöngü, eylem ifadesi, koşul ifadesi yanlış olarak değerlendirildiğinde bile en az bir kez yürütülür. Örneğin, aşağıdaki örnek 1 ila 5 arası sayıları kullanarak yazdırır.do-while döngü -
Misal
[jerry]$ awk 'BEGIN {i = 1; do { print i; ++i } while (i < 6) }'
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Çıktı
1
2
3
4
5
Break İfadesi
Adından da anlaşılacağı gibi, döngü yürütmeyi sonlandırmak için kullanılır. İşte toplam 50'den büyük olduğunda döngüyü sona erdiren bir örnek.
Misal
[jerry]$ awk 'BEGIN {
sum = 0; for (i = 0; i < 20; ++i) {
sum += i; if (sum > 50) break; else print "Sum =", sum
}
}'
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Çıktı
Sum = 0
Sum = 1
Sum = 3
Sum = 6
Sum = 10
Sum = 15
Sum = 21
Sum = 28
Sum = 36
Sum = 45
Devam İfadesi
continuedeyimi, döngünün bir sonraki yinelemesine atlamak için bir döngü içinde kullanılır. Döngü içindeki bazı verilerin işlenmesini atlamak istediğinizde kullanışlıdır. Örneğin, aşağıdaki örnektecontinue 1 ile 20 arasındaki çift sayıları yazdırmak için ifade.
Misal
[jerry]$ awk 'BEGIN {
for (i = 1; i <= 20; ++i) {
if (i % 2 == 0) print i ; else continue
}
}'
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Çıktı
2
4
6
8
10
12
14
16
18
20
Çıkış İfadesi
Komut dosyasının yürütülmesini durdurmak için kullanılır. AWK işlemi için çıkış durum kodu olan bir tamsayıyı argüman olarak kabul eder. Hiçbir argüman sağlanmadıysa,exitsıfır durumu döndürür. İşte toplam 50'den büyük olduğunda yürütmeyi durduran bir örnek.
Misal
[jerry]$ awk 'BEGIN {
sum = 0; for (i = 0; i < 20; ++i) {
sum += i; if (sum > 50) exit(10); else print "Sum =", sum
}
}'
Çıktı
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Sum = 0
Sum = 1
Sum = 3
Sum = 6
Sum = 10
Sum = 15
Sum = 21
Sum = 28
Sum = 36
Sum = 45
Betiğin dönüş durumunu kontrol edelim.
Misal
[jerry]$ echo $?
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Çıktı
10
AWK, programcının her zaman kullanabileceği bir dizi işleve sahiptir. Bu bölüm Aritmetik, Dizgi, Zaman, Bit işleme ve diğer çeşitli fonksiyonları uygun örneklerle açıklamaktadır.
S.No. | Yerleşik işlevler ve Açıklama |
---|---|
1 | Aritmetik Fonksiyonlar AWK, aşağıdaki yerleşik aritmetik işlevlere sahiptir. |
2 | String Fonksiyonları AWK, aşağıdaki yerleşik String işlevlerine sahiptir. |
3 | Zaman Fonksiyonları AWK, aşağıdaki yerleşik zaman işlevlerine sahiptir. |
4 | Bit Manipülasyon İşlevleri AWK, aşağıdaki yerleşik bit işleme işlevlerine sahiptir. |
5 | Çeşitli Fonksiyonlar AWK, aşağıdaki çeşitli işlevlere sahiptir. |
Fonksiyonlar, bir programın temel yapı taşlarıdır. AWK, kendi işlevlerimizi tanımlamamıza izin verir. Büyük bir program işlevlere bölünebilir ve her işlev bağımsız olarak yazılabilir / test edilebilir. Kodun yeniden kullanılabilirliğini sağlar.
Aşağıda, kullanıcı tanımlı bir işlevin genel biçimi verilmiştir -
Sözdizimi
function function_name(argument1, argument2, ...) {
function body
}
Bu sözdiziminde, function_namekullanıcı tanımlı işlevin adıdır. İşlev adı bir harfle başlamalıdır ve karakterlerin geri kalanı herhangi bir sayı, alfabetik karakter veya alt çizgi kombinasyonu olabilir. AWK'nin yedek sözcükleri işlev adları olarak kullanılamaz.
Fonksiyonlar, virgülle ayrılmış birden çok argümanı kabul edebilir. Bağımsız değişkenler zorunlu değildir. Ayrıca herhangi bir bağımsız değişken olmadan kullanıcı tanımlı bir işlev de oluşturabilirsiniz.
function body bir veya daha fazla AWK ifadesinden oluşur.
Minimum ve maksimum sayıyı hesaplayan iki fonksiyon yazalım ve bu fonksiyonları başka bir fonksiyondan çağıralım. main. functions.awk dosya -
Misal
# Returns minimum number
function find_min(num1, num2){
if (num1 < num2)
return num1
return num2
}
# Returns maximum number
function find_max(num1, num2){
if (num1 > num2)
return num1
return num2
}
# Main function
function main(num1, num2){
# Find minimum number
result = find_min(10, 20)
print "Minimum =", result
# Find maximum number
result = find_max(10, 20)
print "Maximum =", result
}
# Script execution starts here
BEGIN {
main(10, 20)
}
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Çıktı
Minimum = 10
Maximum = 20
Şimdiye kadar, standart çıktı akışındaki verileri gösterdik. Verileri bir dosyaya da yönlendirebiliriz. Sonra bir yeniden yönlendirme görünür.print veya printfBeyan. AWK'daki yeniden yönlendirmeler, AWK programı içinde yazılmaları dışında, kabuk komutlarındaki yeniden yönlendirme gibi yazılır. Bu bölüm yeniden yönlendirmeyi uygun örneklerle açıklamaktadır.
Yeniden Yönlendirme Operatörü
Yeniden yönlendirme operatörünün sözdizimi -
Sözdizimi
print DATA > output-file
Verileri output-file. Çıktı dosyası yoksa, bir tane oluşturur. Bu tür yeniden yönlendirme kullanıldığında, ilk çıktı kendisine yazılmadan önce çıktı dosyası silinir. Aynı çıktı dosyasına sonraki yazma işlemleri çıktı dosyasını silmez, ona ekler. Örneğin, aşağıdaki örnek şöyle yazar:Hello, World !!! dosyaya.
Bazı metin verileriyle bir dosya oluşturalım.
Misal
[jerry]$ echo "Old data" > /tmp/message.txt [jerry]$ cat /tmp/message.txt
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Çıktı
Old data
Şimdi AWK'nın yeniden yönlendirme operatörünü kullanarak bazı içerikleri buna yönlendirelim.
Misal
[jerry]$ awk 'BEGIN { print "Hello, World !!!" > "/tmp/message.txt" }' [jerry]$ cat /tmp/message.txt
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Çıktı
Hello, World !!!
Operatör Ekle
Ekleme operatörünün sözdizimi aşağıdaki gibidir -
Sözdizimi
print DATA >> output-file
Verileri, output-file. Çıktı dosyası yoksa, bir tane oluşturur. Bu tür bir yönlendirme kullanıldığında, yeni içerik dosyanın sonuna eklenir. Örneğin, aşağıdaki örnek,Hello, World !!! dosyaya.
Bazı metin verileriyle bir dosya oluşturalım.
Misal
[jerry]$ echo "Old data" > /tmp/message.txt [jerry]$ cat /tmp/message.txt
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Çıktı
Old data
Şimdi AWK'nın ekleme operatörünü kullanarak bazı içerikleri buna ekleyelim.
Misal
[jerry]$ awk 'BEGIN { print "Hello, World !!!" >> "/tmp/message.txt" }' [jerry]$ cat /tmp/message.txt
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Çıktı
Old data
Hello, World !!!
Boru
Bir dosya kullanmak yerine bir boru aracılığıyla başka bir programa çıktı göndermek mümkündür. Bu yeniden yönlendirme, komut için bir kanal açar ve bu kanal üzerinden öğelerin değerlerini, komutu yürütmek için başka bir işleme yazar. Yeniden yönlendirme bağımsız değişken komutu aslında bir AWK ifadesidir. İşte borunun sözdizimi -
Sözdizimi
print items | command
Kullanalım tr küçük harfleri büyük harfe dönüştürme komutu.
Misal
[jerry]$ awk 'BEGIN { print "hello, world !!!" | "tr [a-z] [A-Z]" }'
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Çıktı
HELLO, WORLD !!!
İki yönlü iletişim
AWK, aşağıdakileri kullanarak harici bir işlemle iletişim kurabilir: |&, bu iki yönlü iletişimdir. Örneğin, aşağıdaki örnektetrküçük harfleri büyük harfe dönüştürme komutu. bizimcommand.awk dosya -
Misal
BEGIN {
cmd = "tr [a-z] [A-Z]"
print "hello, world !!!" |& cmd
close(cmd, "to")
cmd |& getline out
print out;
close(cmd);
}
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Çıktı
HELLO, WORLD !!!
Komut dosyası şifreli görünüyor mu? Açıklığa kavuşturalım.
İlk ifade, cmd = "tr [a-z] [A-Z]"AWK'dan iki yönlü iletişim kurduğumuz komuttur.
Sonraki ifade, yani yazdırma komutu, trkomut. Buraya&| iki yönlü iletişimi gösterir.
Üçüncü ifade, yani close(cmd, "to"), kapatır to yürütme rekabetinden sonra süreç.
Bir sonraki ifade cmd |& getline out depolar output getline işlevi yardımıyla değişkene dönüşür.
Bir sonraki print ifadesi çıktıyı ve son olarak close işlevi komutu kapatır.
Şimdiye kadar AWK'leri kullandık print ve printfstandart çıktıda verileri görüntülemek için işlevler. Ancak printf, daha önce gördüklerimizden çok daha güçlü. Bu işlev C dilinden alınmıştır ve biçimlendirilmiş çıktı üretirken çok faydalıdır. Printf ifadesinin sözdizimi aşağıdadır -
Sözdizimi
printf fmt, expr-list
Yukarıdaki sözdiziminde fmt biçim belirtimleri ve sabitlerinden oluşan bir dizedir. expr-list biçim belirleyicilerine karşılık gelen bağımsız değişkenlerin listesidir.
Kaçış dizileri
Herhangi bir dizeye benzer şekilde, format gömülü kaçış dizileri içerebilir. Aşağıda tartışılanlar, AWK tarafından desteklenen kaçış dizileridir -
Yeni hat
Aşağıdaki örnek yazdırılır Hello ve World yeni satır karakterini kullanarak ayrı satırlarda -
Example
[jerry]$ awk 'BEGIN { printf "Hello\nWorld\n" }'
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Output
Hello
World
Yatay sekme
Aşağıdaki örnek, farklı alanı görüntülemek için yatay sekme kullanır -
Example
[jerry]$ awk 'BEGIN { printf "Sr No\tName\tSub\tMarks\n" }'
Yukarıdaki kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Output
Sr No Name Sub Marks
Dikey Sekme
Aşağıdaki örnek, her dosyalandıktan sonra dikey sekme kullanır -
Example
[jerry]$ awk 'BEGIN { printf "Sr No\vName\vSub\vMarks\n" }'
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Output
Sr No
Name
Sub
Marks
Geri tuşu
Aşağıdaki örnek, sonuncusu dışındaki her alandan sonra bir geri tuşu yazdırır. İlk üç alandan son sayıyı siler. Örneğin,Field 1 olarak görüntülenir Field, çünkü son karakter backspace ile silinir. Ancak son alanField 4 olduğu gibi görüntüleniyor, çünkü bir \b sonra Field 4.
Example
[jerry]$ awk 'BEGIN { printf "Field 1\bField 2\bField 3\bField 4\n" }'
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Output
Field Field Field Field 4
Satırbaşı
Aşağıdaki örnekte, her alanı yazdırdıktan sonra, bir Carriage Return ve sonraki değeri geçerli yazdırılan değerin üstüne yazdırın. Bu, son çıktıda yalnızca görebileceğiniz anlamına gelirField 4, önceki tüm alanların üstüne basılacak son şey olduğu için.
Example
[jerry]$ awk 'BEGIN { printf "Field 1\rField 2\rField 3\rField 4\n" }'
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Output
Field 4
Form besleme
Aşağıdaki örnek, her alanı yazdırdıktan sonra form beslemeyi kullanır.
Example
[jerry]$ awk 'BEGIN { printf "Sr No\fName\fSub\fMarks\n" }'
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Output
Sr No
Name
Sub
Marks
Biçim Tanımlayıcısı
C dilinde olduğu gibi, AWK'nın da format belirleyicileri vardır. Printf ifadesinin AWK sürümü aşağıdaki dönüştürme özelliği biçimlerini kabul eder -
% c
Tek bir karakter yazdırır. Argüman için kullanılırsa%csayısaldır, bir karakter olarak değerlendirilir ve yazdırılır. Aksi takdirde, argümanın bir dize olduğu varsayılır ve bu dizenin tek ilk karakteri yazdırılır.
Example
[jerry]$ awk 'BEGIN { printf "ASCII value 65 = character %c\n", 65 }'
Output
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
ASCII value 65 = character A
% d ve% i
Ondalık sayının yalnızca tam sayı kısmını yazdırır.
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %d\n", 80.66 }'
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Output
Percentags = 80
% e ve% E
[-] d.dddddde [+ -] dd biçiminde bir kayan nokta sayısı yazdırır.
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %E\n", 80.66 }'
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Output
Percentags = 8.066000e+01
%E format kullanır E e yerine.
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %e\n", 80.66 }'
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Output
Percentags = 8.066000E+01
% f
[-] ddd.dddddd biçiminde bir kayan nokta sayısı yazdırır.
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %f\n", 80.66 }'
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Output
Percentags = 80.660000
% g ve% G
% E veya% f dönüşümünü (hangisi daha kısaysa) kullanır ve anlamlı olmayan sıfırlar bastırılır.
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %g\n", 80.66 }'
Output
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Percentags = 80.66
%G format kullanır %E % e yerine.
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %G\n", 80.66 }'
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Output
Percentags = 80.66
%Ö
İşaretsiz sekizlik bir sayı basar.
Example
[jerry]$ awk 'BEGIN { printf "Octal representation of decimal number 10 = %o\n", 10}'
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Output
Octal representation of decimal number 10 = 12
% u
İşaretsiz bir ondalık sayı yazdırır.
Example
[jerry]$ awk 'BEGIN { printf "Unsigned 10 = %u\n", 10 }'
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Output
Unsigned 10 = 10
% s
Bir karakter dizisi yazdırır.
Example
[jerry]$ awk 'BEGIN { printf "Name = %s\n", "Sherlock Holmes" }'
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Output
Name = Sherlock Holmes
% x ve% X
İşaretsiz bir onaltılık sayı yazdırır. %X format, küçük harf yerine büyük harfler kullanır.
Example
[jerry]$ awk 'BEGIN {
printf "Hexadecimal representation of decimal number 15 = %x\n", 15
}'
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Output
Hexadecimal representation of decimal number 15 = f
Şimdi% X kullanalım ve sonucu gözlemleyelim -
Example
[jerry]$ awk 'BEGIN {
printf "Hexadecimal representation of decimal number 15 = %X\n", 15
}'
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Output
Hexadecimal representation of decimal number 15 = F
%%
Tek bir % karakter ve hiçbir bağımsız değişken dönüştürülmez.
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %d%%\n", 80.66 }'
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Output
Percentags = 80%
% İle İsteğe Bağlı Parametreler
İle % aşağıdaki isteğe bağlı parametreleri kullanabiliriz -
Genişlik
Alan, width. Varsayılan olarak, alan boşluklarla doldurulur, ancak 0 bayrağı kullanıldığında, sıfırlarla doldurulur.
Example
[jerry]$ awk 'BEGIN {
num1 = 10; num2 = 20; printf "Num1 = %10d\nNum2 = %10d\n", num1, num2
}'
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Output
Num1 = 10
Num2 = 20
Önde Gelen Sıfırlar
Baştaki sıfır, çıktının boşluklar yerine sıfırlarla doldurulması gerektiğini belirten bir bayrak görevi görür. Lütfen bu bayrağın yalnızca alan yazdırılacak değerden daha geniş olduğunda bir etkiye sahip olduğunu unutmayın. Aşağıdaki örnek bunu açıklamaktadır -
Example
[jerry]$ awk 'BEGIN {
num1 = -10; num2 = 20; printf "Num1 = %05d\nNum2 = %05d\n", num1, num2
}'
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Output
Num1 = -0010
Num2 = 00020
Sola Yaslama
İfade, kendi alanında sola dayalı olmalıdır. Girdi dizesi belirtilen karakter sayısından az olduğunda ve sola yaslanmasını istiyorsanız, yani sağa boşluklar ekleyerek,% 'den hemen sonra ve sayıdan önce bir eksi simgesi (-) kullanın.
Aşağıdaki örnekte, AWK komutunun çıktısı, SATIRININ SONU ($) karakterini görüntülemek için cat komutuna aktarılmıştır.
Example
[jerry]$ awk 'BEGIN { num = 10; printf "Num = %-5d\n", num }' | cat -vte
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Output
Num = 10 $
Önek İşareti
Değer pozitif olsa bile, sayısal değerlerin önüne her zaman bir işaret koyar.
Example
[jerry]$ awk 'BEGIN {
num1 = -10; num2 = 20; printf "Num1 = %+d\nNum2 = %+d\n", num1, num2
}'
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Output
Num1 = -10
Num2 = +20
Hash
% O için baştaki sıfır sağlar. % X ve% X için, yalnızca sonuç sıfır değilse, sırasıyla bir 0x veya 0X sağlar. % E,% E,% f ve% F için sonuç her zaman bir ondalık nokta içerir. % G ve% G için, sondaki sıfırlar sonuçtan kaldırılmaz. Aşağıdaki örnek bunu açıklamaktadır -
Example
[jerry]$ awk 'BEGIN {
printf "Octal representation = %#o\nHexadecimal representaion = %#X\n", 10, 10
}'
Bu kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -
Output
Octal representation = 012
Hexadecimal representation = 0XA