23/11/2021

Awk as script language

Aritmetik

$ cat file2.txt
Ahmet 90 70 80
Elif 80 90 60
Deniz 100 70 90

Mesela toplama

$ awk '{print $2+$3+$4}' file2.txt
240
230
260

Ancak değişkende tanımlayabiliriz.

$ awk '{sum=$2+$3+$4 ;print "Sum is:",sum}' file2.txt
Sum is: 240
Sum is: 230
Sum is: 260

Text in rakamsal değeri 0 dır.

Increment (artım) operatörü

Mesela paswd dosyasina bakalim

root:x:0:0:root:/root:/bin/bash

daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin

Bazilarinda “nologin” var. bunlardan kac tane var ?

$ awk 'BEGIN {count=0} /nologin/ {count++} END {print count}' /etc/passwd
22

IF-ELSE

Yeni bir dosya bir CSV dosyası, kişilerin adı,yaşı ve kilosu var.

$ cat file3.txt
Mahmut,4,12
Ayse,19,65
Deniz,12,50
Bulut,21,70
Cemil,3,6
Cemile,3,7

Şimdi bunu script olarak işleyelim.

$ cat awk.out
        BEGIN {
        FS=","
        Cocuk=0
        Bebek=0
        Yetiskin=0
        }
       {
        if ($2 < 5)
                {
                Bebek++
                }
        if ($2>5 && $2<18)
                {
                Cocuk++
                }
        if ($2>18)
                {
                Yetiskin++
                }
        }
        END {
        print "Bebeklerin sayisi :" , Bebek
        print "Cocularin sayisi :" , Cocuk
        print "Yetiskinlerin sayisi :" , Yetiskin
        }

Ve çalıştıralım

$ awk -f awk.out file3.txt
Bebeklerin sayisi : 4
Cocularin sayisi : 1
Yetiskinlerin sayisi : 2

while da benzeri yapıda çalışmaktadır.

while (i < NF)
{
code.....
i++
}

Functions

Scripte değişiklik yapalım

$ cat awk.out
        function yazdir()
        {
        printf "Function calisti!! \n"
        }
        BEGIN {
        FS=","
        Cocuk=0
        Bebek=0
        Yetiskin=0
        }
       {
        if ($2 < 5)
                {
                Bebek++
                yazdir()
                }
        if ($2>5 && $2<18)
                {
                Cocuk++
                yazdir()
                }
        if ($2>18)
                {
                Yetiskin++
                yazdir()
                }
        }
        END {
        print "Bebeklerin sayisi :" , Bebek
        print "Cocularin sayisi :" , Cocuk
        print "Yetiskinlerin sayisi :" , Yetiskin
        }

Function i ekledik.

çalışınca

$ awk -f awk.out file3.txt
Function calisti!!
Function calisti!!
Function calisti!!
Function calisti!!
Function calisti!!
Function calisti!!
Function calisti!!
Bebeklerin sayisi : 4
Cocularin sayisi : 1
Yetiskinlerin sayisi : 2

Leave a Reply