|

Perintah Awk Cara Menggunakan Pattern Spesial Begin dan END

Ketika Menggunakan Awk ada sebuah pattern khusus yaitu BEGIN dan END. Patern ini memiliki fungsi dimana pattern BEGIN berfungsi untuk mengeksekusi action setelah END untuk dijalankan pertama kali dan Pattern END berfungsi mengeksekusi action Setelah END sebelum perintah awk selesai.

Bentuk umum sytax BEGIN dan END pada awk :

awk 'BEGIN {action BEGIN} /Pattern/{action) /Pattern/{action} END {action END}'

Ketika Pattern BEGIN digunakan action yang dijalankan akan berpengaruh terhadap action selanjutnya sampai pattern END selesai dieksekusi.

Untuk memperaktikkan pattern BEGIN END bisa dibuat file buah.txt untuk menjadi bahan input file teks yang akan di proses. Isi file bisa seperti berikut ini.

Apel            red    4        $20
Pisang          yellow 6        $10
Stroberi        red    3        $30
Rasberi         red    99       $100
Anggur          purple 10       $50
Apel            green  8        $40
Naga            purple 2        $20
Sawo            brown  4        $50
Kentang         brown  9        $30
Nanas           yellow 5        $110
Pattern BEGIN mendefinisikan Delimiter dan Merubah Delimiter Menjadi karakter yang berbeda.

Untuk melakukannya dibutuhkan akan dibantu oleh spesial variabel FS untuk menentukan karakter delimiter baris dan OFS untuk merubah karakter delimiter baris yang akan di cetak.

# awk 'BEGIN {FS="$"; OFS="Rp"} {print $1,$2;}' buah.txt
awk BEGIN END

Agar mudah dipahami sebagai perbandingan jika action BEGIN lebih dahulu di eksekusi maka posisi bisa dari syntax awal bisa diubah menjadi seperti dibawah.

# awk '{print $1,$2;} BEGIN {FS="$"; OFS="Rp"} ' buah.txt
awk BEGIN END

Dengan begini dapat dilihat jika action BEGIN yang berisi {FS=”$”; OFS=”Rp”} pertama di eksekusi baru setelahnya action {print $1,$2;}.

Pattern END Menghitung Jumlah total Harga

Untuk melihat fungsi Pattern END yang berisi perulangan perhitungan, Lanjutkan perintah sebelumnya dan diberikan pattern END dan action berupa perulangan for yang menghitung total kolom 2 dari setiap baris.

# awk 'BEGIN {FS="$"; OFS="Rp."} {ht[i++]=$2; sum=0; print $1, $2} END{for(i in ht){sum=sum+ht[i];}print "\nHarga Total = \t\t\tRp." sum;}' buah.txt
awk BEGIN END
Menulis AWK Pattern BEGIN dan END Kedalam FILE PROGRAM

Jika terlalu panjang keselurhan perintah dapat disimpan didalam sebuah file dalam contoh diberi nama file hitung berbeda dengan bash script file program ini hanya berisi sekumpulan pattern dan action dari awk. Isi file sama dengan bagian keseluruhan action awk tanpa tanda kutip satu awal dan akhir .

BEGIN   {FS="$"; OFS="Rp."}
        {ht[i++]=$2; sum=0; print $1, $2}
END     {for(i in ht)   {
                sum=sum+ht[i];
                        }
        print "\nHarga Total = \t\t\tRp." sum;
                        }

Untuk menjalankannya bisa menggunakan opsi -f.

# awak -f hitung buah.txt
awk BEGIN END
Menulis AWK BEGIN dan END kedalam BASH SCRIPT

Karena awk sendiri adalah perintah yang merupakan bahasa perograman yang bisa digunakan di bash script, jadi keseluruhan perintah yang panjang sebelumnya tersebut bisa di tulis kedalam bash script sederhana yang diberi nama hitung.sh dengan isi sebagai berikut :

#!/bin/bash
for file in $@; do
        if [ -f $file ] ; then
                #Mencetak Sumber File input
                echo "File Sumber: $file"
				
                #awk mencetak hasil perhitungan.
                awk 'BEGIN {FS="$"; OFS="Rp."; print "Buah\t\tWarna\tJumlah\tHarga"} {ht[i++]=$2; sum=0; print $1, $2} END{for(i in ht){sum=sum+ht[i];}print "\nHarga Total = \t\t\tRp." sum;}' $file
        else
                #Cetak Error dan terminate script ketika kondisi file tidak tepat.
                echo "$file bukanlah sebuah file." >&2 && exit 1
        fi
done
#terminate script ketika kondisi pertama sukses.
exit 0

Untuk menjalankan perintahnya bisa diberikan permission executable dan panggil file script diikuti file sumber.

# chmod +x hitung.sh
# ./hitung.sh buah.txt
awk BEGIN END

Kesimpulan

Awk dengan spesial pattern BEGIN dan END memperluas fungsi action yang tidak hanya membuatnya beguna sebagai filtering tetapi modifikasi dan perhitungan hasil dari sebuah teks dan file. BEGIN dan END membuat adanya prioritas action didalam sekumpulan action di awk.

Similar Posts

5 3 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments