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