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
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
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
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
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
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.