AWK Programming 3 - Ahmad Reza Musthafa
-
Upload
ahmad-reza-musthafa -
Category
Documents
-
view
92 -
download
3
Transcript of AWK Programming 3 - Ahmad Reza Musthafa
LAPORAN RESMI
READING INPUT FILE
Oleh :
Ahmad Reza Musthafa (7609040007)
2 – D4 TEKNIK KOMPUTER
PROGRAM STUDI D4 TEKNIK KOMPUTER
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA - ITS
2 – D4 Teknik Komputer| 7609040007 2
Analisa
Perrcobaan diatas dilakukan user dengan mengeksekusi baris kode program awk ‘BEGIN , RS =”/” -
,print $0 -’ BBS-list.
Seperti variable lainnya, nilai dari RS dapat diganti didalam program awk dengan operator
assignment, dalam source code diatas dideklarasikan nilai dari RS yaitu berupa string “/” slash.
Tujuan dari percobaan diatas yaitu untuk menghilangkan string yang berupa “/” dari file BBS-list
yang kemudian mencetak hasilnya pada terminal.
Baris data pada field pertama dan baris kelima yaitu camelot menghasilkan posisi output yang
berbeda dari data yang lain, hal tersebut dikarenakan data Camelot pada field ketiga hanya memiliki
satu data dan tidak terdapat string yang berupa “/”, sehingga terminal akan menghasilkan list baris
data tersebut layaknya data asli.
Data lain pada field ketiga yang memiliki string berupa “/” akan mengalami pemisahan berupa spasi
2 – D4 Teknik Komputer| 7609040007 3
Analisa
Perrcobaan diatas dilakukan user dengan mengeksekusi baris kode program awk ‘, print $0 -’ RS
=”/” BBS-list
Seperti variable lainnya, nilai dari RS dapat diganti didalam program awk dengan operator
assignment, dalam source code diatas dideklarasikan nilai dari RS yaitu berupa string “/” slash.
Seperti pada percobaan sebelumnya, tujuan dari percobaan diatas yaitu untuk menghilangkan
string yang berupa “/” dari file BBS-list yang kemudian mencetak hasilnya pada terminal.
Baris data pada field pertama dan baris kelima yaitu camelot menghasilkan posisi output yang
berbeda dari data yang lain, hal tersebut dikarenakan data Camelot pada field ketiga hanya memiliki
satu data dan tidak terdapat string yang berupa “/”, sehingga terminal akan menghasilkan list baris
data tersebut layaknya data asli.
Data lain pada field ketiga yang memiliki string berupa “/” akan mengalami pemisahan berupa spasi
2 – D4 Teknik Komputer| 7609040007 4
Analisa
Percobaan diatas bertujuan untuk memanfaatkan penggunaan pipe antara penggunaan intruksi
system yaitu echo dengan awk program. Output dari percobaan diatas yaitu 0, dikarenakan intruksi
echo hanya berdiri sendiri atau tidak memiliki record, sehingga tidak diketahui nilai dari variable,
maka terminal akan menghasilkan nilai default dari integer yaitu 0
Analisa
Percobaan diatas bertujuan untuk implementas penggunaan record dengan menggunakan intruksi
echo. Proses awal dari pembuatan source yaitu pendeklarasian nilai dari masing-masing record.
Untuk mendeklarasikan nilai dari record-record, dapat digunakan intruksi echo dengan format echo
<nama_record1> <nilai> <nama_record2> <nilai>
Intruksi tersebut dalam pemisahan data record memanfaatkan pemisahan data berupa kolom atau
menempati masing-masing field, yang kemudian data dapat dipanggil dengan pemanfaatan field
tersebut.
Intruksi selanjutnya yaitu pengkondisian berupa pipe terhadap baris program selanjutnya,
penjelasan dari baris program awk diatas yaitu apabila string pada field dari terkecil menuju kea rah
field dengan index besar dan memperoleh nilai dari suatu string yang berupa huruf besar, maka
akan menggunakan huruf tersebut sebagai batas untuk record selanjutnya, akan tetapi jika tidak
terdapat string yang berupa huruf besar, maka record bernilai null
2 – D4 Teknik Komputer| 7609040007 5
Analisa
Praktikum di atas bertujuan untuk mencetak suatu record dari baris data yang memiliki atau
mengandung suatu data berupa string yang dieksekusi melalui awk pada terminal.
Dimana user melakukan pencarian data yang menempati record yang memiliki data yang terdiri dari
string “foo”, setelah itu maka user melakukan pencetakkan record tersebut pada terminal dimana
record yang dicetak merupakan pada field ke 2. User dapat memanfaatkan beberapa intruksi untuk
melakukan pencetakan output pada terminal.
File BBS-list diatas terdiri dari lebih dari satu field, sehingga ketika user menginginkan untuk
mengakses suatu field tertentu, dapat memanfaatkan tanda $ disusul dengan field yang dituju.
Sehingga output ketika melakukan pencetakan suatu data yang memiliki banyak field, tergantung
dari field keberapa yang hendak dicetak.
Apabila user menginginkan semua field dari suatu record dicetak, maka dapat menggunakan $0
setelah intruksi print. Operator ~ yaitu
Jadi record yang mengandung string berupa “foo” maka akan dicetak record tersebut secara
keseluruhan field, hal tersebut dikarenakan penggunaan source print $0
Analisa
Dari source diatas yaitu bertujuan untuk mencetak record dari first field dan last field dari file BBS-
list yang mengandung string berupa “foo”
2 – D4 Teknik Komputer| 7609040007 6
Praktikum di atas bertujuan untuk mencetak suatu record dari baris data yang memiliki atau
mengandung suatu data berupa string yang dieksekusi melalui awk pada terminal.
Dimana user melakukan pencarian data yang menempati record yang memiliki data yang terdiri dari
string “foo”, setelah itu maka user melakukan pencetakkan record tersebut pada terminal dimana
record yang dicetak merupakan pada field ke 2. User dapat memanfaatkan beberapa intruksi untuk
melakukan pencetakan output pada terminal.
File BBS-list diatas terdiri dari lebih dari satu field, sehingga ketika user menginginkan untuk
mengakses suatu field tertentu, dapat memanfaatkan tanda $ disusul dengan field yang dituju.
Sehingga output ketika melakukan pencetakan suatu data yang memiliki banyak field, tergantung
dari field keberapa yang hendak dicetak.
Analisa
Percobaan diatas dilakukan user dengan mengeksekusi baris program awk ‘,nboxes =$3 ;$3 =$3-10
print nboxes, $3 -’ tabel2, dimana file tabel2 berupa record yang memiliki field lebih dari tiga.
nboxes=$3 Merupakan intruksi untuk untuk mendeklarasikan variable nboxes dimana variable
tersbut diisi dengan record pada field ketiga dari file tabel2, keseluruhan dari record (dari baris
pertama sampai diperoleh suatu nilai null) akan disimpan pada variable tersebut, dimana variable
tersebut memiliki nilai yang memiliki tempat masing-masing
intruksi selanjunya yaitu $3=$3-10 Merupakan baris perhitungan yang bertujuan untuk
mengurangi nilai dari record pada field ketiga dengan 10 dari masing-masing baris data.
Ketika user mengeksekusinya, maka akan dihasilkan output seperti diatas dimana pada setiap
2 – D4 Teknik Komputer| 7609040007 7
record perbaris memiliki perbedaan data sebesar 10 pada masing-masing field
Analisa
Percobaan diatas dilakukan user dengan mengeksekusi baris program awk ‘,$2=$2-10;print $0-’
tabel2, dimana file tabel2 berupa record yang memiliki field lebih dari tiga.
intruksi selanjutnya yaitu $2=$2-10 Merupakan baris perhitungan yang bertujuan untuk
mengurangi nilai dari record pada field kedua dengan 10 dari masing-masing baris data.
Ketika user mengeksekusinya, maka akan dihasilkan output seperti diatas dimana pada setiap
record perbaris memiliki perbedaan data sebesar 10 pada masing-masing field
Setelah itu dengan menggunakan intruksi print $0, maka akan ditampilkan keseluruhan record dan
field, dimana pada field kedua telah mengalami pengurangan nilai sebesar 10.
2 – D4 Teknik Komputer| 7609040007 8
Analisa
Percobaan diatas dilakukan user dengan mengetikkan baris program awk ‘, $6=($5+$4+$3+$2)
>print $6 -’ tabel2, dimana file tabel2 terdiri dari beberapa record dan lima field.
Intruksi $6=$5+$4+$3+$2 Merupakan intruksi yang bertujuan untuk menjumlahkan data pada
record lima, empat, tiga dan dua dari masing-masing baris, yang kemudian hasil dari penjumlahan
tersebut disimpan didalam field keenam, sebelumnya field tersebut tidak terdapat didalam file
tabel2, dengan memanfaatkan operator “>” yang berfungsi untuk membelokkan standar output
pada suatu field secara temporary atau sementara, sehingga ketika intruksi print memanggil field
keenam maka akan dihasilkan nilai tersebut berupa nilai integer hasil dari penjumlahan data integer
2 – D4 Teknik Komputer| 7609040007 9
Analisa
BEGIN{
If ($(NF+1)!="") #penggunaan state yang sebenarnya sangat kecil kemungkinan untuk bernilai true
print "can’t happen" #event ketika bernilai true
else
print "everything is normal" #event jika bernilai false
}
Intruksi tersbut bertujuan untuk melakukan pengkondisian terhadap suatu file yang dipanggil
bersamaan dengan program awk, kondisi tersebut berlaku untuk semua file yang bertipe ASCII text.
Dimana file yang diinputkan akan mengalami penyeleksian terhadap tiap field, dikarenakan state
dari pengkondisian diats yaitu memanfaatkan nilai dari field setelah field terakhir yaitu NF, jika
setelah field terakhir masing terdapat data, hal tersebut tidak akan terjadi, maka akan kecil
kemungkinan suatu file mengalami kondisi tersebut, oleh karena itu banyak file text yang melompat
menuju state else dari state awal, sehingga ditampilkan teks berupa everything is normal
Analisa
Percobaan diatas menggunakan intruksi echo yang memanfaatkan library dari system operasi linux.
Dimana echo tersebut berfungsi untuk mendeklarasi nilai dari record-record, dalam source diatas
dibentuk 4 record, diantaranya yaitu a, b, c, d.
Setelah itu terdapat pemanfaatkan kondisi pipelining dengan tanda | yang berfungsi untuk sent
2 – D4 Teknik Komputer| 7609040007 10
record variable pada baris awk program selanjutnya. Dalam baris program awk tersebut diset nilai
variable OFS=”:” dan $2=””
Setelah itu terdapat penggunaan intruksi print untuk mencetak record secara keseluruhan, dimana
pada record field kedua dihapus dan direplace dengan null, setelah dicetak maka akan dihasilkan
output $0=a::c:d
Dan nilai dari NF=4, dikarenakan hanya terdapat 4 field dalam record tersebut
Analisa
Percobaan diatas menggunakan intruksi echo yang memanfaatkan library dari system operasi linux.
Dimana echo tersebut berfungsi untuk mendeklarasi nilai dari record-record, dalam source diatas
dibentuk 4 record awal, diantaranya yaitu a, b, c, d.
Setelah itu terdapat pemanfaatkan kondisi pipelining dengan tanda | yang berfungsi untuk sent
record variable pada baris awk program selanjutnya. Dalam baris program awk tersebut diset nilai
variable OFS=”:” dan $2=”” dan juga nilai dari field $6=”new”. Sebelumnya field keenam tidak
memiliki data.
Setelah itu terdapat penggunaan intruksi print untuk mencetak record secara keseluruhan, dimana
pada record field kedua dihapus dan direplace dengan null, setelah dicetak maka akan dihasilkan
output $0=a::c:d::new.
Secara otomatis nilai dari field kelima =null selama tidak dideklarasikan nilainya sebelumnya.
Dan nilai dari NF=6, dikarenakan hanya terdapat 6 field dalam record tersebut setelah
dideklarasikan nilai dari field keenam
2 – D4 Teknik Komputer| 7609040007 11
Analisa
Percobaan diatas menggunakan intruksi echo yang memanfaatkan library dari system operasi linux.
Dimana echo tersebut berfungsi untuk mendeklarasi nilai dari record-record, dalam source diatas
dibentuk 6 record awal, diantaranya yaitu a, b, c, d, e, f
Setelah itu terdapat pemanfaatkan kondisi pipelining dengan tanda | yang berfungsi untuk sent
record variable pada baris awk program selanjutnya. Dalam baris program awk tersebut digunakan
baris program untuk melakukan pencetakkan data NF, dengan menggunakan intruksi print.
Setelah itu nilai dari NF diset menjadi 3, jadi record yang dipakai hanya dari field kesatu sampai
ketiga. Jadi record hanya berupa a b c
Analisa
Percobaan diatas memanfaatkan intruksi echo dari library system operasi linux. Dimana dalam
penggunaannya bertujuan untuk mendeklarasikan record berupa a b c d yang kemudian
memanfaatkan kondisi pipelining dari program awk dengan intruksi print $2, jadi akan
menghasilkan output berupa “b”, dimana record tersebut terletak pada field kedua
Pada baris program selanjutnya, yaitu penggunaan record yang sama dan kemudian memanfaatkan
pipelining terhadap program awk berikutnya, dalam baris program tersebut dideklarasikan nilai dari
FS=[\t\n]+ Sehingga akan melakukan tabulasi dan enter terhadap masing-masing record.
2 – D4 Teknik Komputer| 7609040007 12
Sehingga field kedua ditempati oleh record pertama dan seterusnya.
Percobaan selanjutnya memanfaatkan intruksi echo dari library system operasi linux. Dimana dalam
penggunaannya bertujuan untuk mendeklarasikan record berupa \t a b c d yang kemudian
memanfaatkan kondisi pipelining dari program awk dengan intruksi print;$2=$2;print. Maka akan
secara otomatis akan dihasilkan output untuk intruksi print pertama yaitu record awal dengan
menampilkan space sebelum record. Untuk menghilangkan space tersebut dapat dilakukan dengan
mendeklarasikan nilai dari field yang dituju bernilai dengan field tersebut, maka ketika program
dieksekusi, tidak dijumpai adanya space
Analisa
Percobaan diatas memanfaatkan intruksi echo dari library system operasi linux. Dimana dalam
penggunaannya bertujuan untuk mendeklarasikan record berupa ‘xxAA xxBBxx C’ yang kemudian
memanfaatkan kondisi pipelining dari program awk dengan intruksi nawk –F ‘(^x+)|( +)’ ’,for
(i=1;i<=NF;i++) printf “-->%s<-- \n”,$i -’
Analisa
2 – D4 Teknik Komputer| 7609040007 13
Percobaan diatas memanfaatkan intruksi echo dari library system operasi linux. Dimana dalam
penggunaannya bertujuan untuk mendeklarasikan record berupa a b yang kemudian memanfaatkan
kondisi pipelining dari program awk dengan intruksi gawk ‘BEGIN ,FS=””-
Dalam source diatas dideklarasikan nilai dari FS adalah null atau “”
Kemudian dengan memanfaatkan kondisi perulangan for dimana dalam perulangan tersebut
memanfaatkan index dari field maksimum yaitu NF
for(i=1;i<=NF;i+i+1){ #nilai NF=2
print (“Field %s is %s”,i,$i)
}
Fungsi dari FS yaitu untuk separated, pemisah record, sehinnga record antara a dan b dikarenakan
memiliki space, maka space tersebut digunakan sebagai separated, sehingga field menjadi 3 dan
field kedua ditempati dengan nilai null. Dan $1=a
Sehingga kondisi perulangan ketika i=3, maka $3=b
Analisa
Intruksi program awk pada terminal diatas bertujuan untuk memanggil awk program yang bernama
2 – D4 Teknik Komputer| 7609040007 14
baud.awk. dari baris perintah diatas nilai FS diset dengan karakter “-“. Program ini akan mencetak
list dari file BBS-list yang contain string 300.
Catatan untuk baris keempat dari output diatas, nilai original dari data tersebut :
alpo-net 555-3412 2400/1200/300 A
karakter “-“ dalam system digunakan sebagai separator (pemisah) field. Jadi setelaah karakter
tersebut, maka data selanjutnya pada field berikutnya tidak akan ditampilkan. Apabila karakter “-“
digunakan untuk memisahkan data pada field yang sama, maka data setelah karakter tersebut akn
diremove, dan field selanjutnya tidak akan ditampilkan.
Analisa
2 – D4 Teknik Komputer| 7609040007 15
Program diatas bertujuan untuk memberikan pemisan (spacer) pada field kedua dan mengganti nilai
dari field ketiga yang memiliki maksimal satu string berupa “/ ^ *” dengan nilai 0, setelah itu tidak
akan mengganti nilai dari data yang dimana record tersebut memiliki string “/ ^ *” lagi.
sub(/^ */,””,idle) Merupakan intruksi untuk kondisi jika terdapat strin berupa / ^ * maka akan
memasukkan nilai “” kedalam variable idle, setelah itu nilai dari variable idle digunakan dalam
pengkondisian dengan state bahwa jika idle=””, maka akan menghasilkan nilai balik = 0,
namun jika terdapat data yang mengandung string berupa “:”, maka akan mengalami split dan akan
memberikan nilai balik idle sesuai dengan perhitungan t[i]*60+t[2]
namun juga jika data mengandung string “day”, maka nilai idle menjadi nilai idle dikalikan dengan
24 *60*60.
Kemudian nilai dari field 1, 2 dan variable idle dicetak menggunakan intruksi print $1,$2,idle
Untuk menjalankan awk program tersebut, maka dapat mengeksekusi intruksi berikut pada
terminal:
$ awk –f <nama_awk_program> <namafile>
2 – D4 Teknik Komputer| 7609040007 16
2 – D4 Teknik Komputer| 7609040007 17
Analisa
Percobaan diatas bertujuan untuk membaca suatu record dari file dengan menggunakan intruksi
getline dari awk programming.
Awalnya user hendak membaca record dan semua field dari suatu data, hal tersebut dapat
dilakukan dengan menggunakan perulangan menggunakan for, dimana setiap perulangan
mengalami pengambilan baris data menggunakan intruksi getline dengan file sebagai input, hal ini
memanfaatkan pembelokan standar input dari suatu file.
Didalam perulangan tersebut juga mengalami pengkondisikan bahwa jika file dari tabel2 sudah tidak
terdapat record atau data lahi, maka proses perulangan akan tidak melakukan pekerjaan.
2 – D4 Teknik Komputer| 7609040007 18
Dikarenakan sudah tidak memenuhi syarat pengkondisian untuk penyimpanan dan pencetakan
string dari suatu record. Untuk penyimpanan tiap baris data, dapat memanfaatkan penggunakan
variable yang berupa array, sehingga user dapat menyimpan dan memanggil sesuai dengan index
dari array tersebut.
Setelah itu pada intruksi selanjutnya, yaitu user hendak mengambil record yang terdiri dari satu
field akan tetapi record tersebut terdiri dari baris dimana baris-baris tersebut mewakili beberapa
record.
Hal ini dapat dilakukan user dengan menggunakan perulangan untuk mendapatkan record dalam
bentuk array,
for(c=0;c<=10;c++){
getline bidata*c+ <”biodata”
}
File yang diambil datanya, yaitu file biodata yang kemudian disimpan pada variable yang berupa
array sesuai dengan index masing-masing dan akan mengalami penambahan nilai index setiap
perulangan sampai kondisi akhir perulangan terpenuhi
Untuk mencetak data sesuai dengan record dan field secara vertical, maka programmer
memanfaatkan manipulasi terhadap index dari array
User dapat melihat source code diatas yaitu pada pengkondisian dengan state biodata[c]!=null,
Hal tersebut akan mencetak record dan menempati tab yang disediakan
2 – D4 Teknik Komputer| 7609040007 19
2 – D4 Teknik Komputer| 7609040007 20
Analisa
Percobaan diatas bertujuan untuk menghilangkan baris komentar dari file yang menggunakan
bahasa pemrograman cpp dan sejenisnya, program diatas akan menghapus string yang berada
diantara string”/*” dengan “*/”, dalam hal tersebut bahasa pemrograman yang memanfaatkan
tanda tersebut sebagai penanda komentar yaitu bahasa c, cpp, java, c#, j# dll.
Algoritma dari program diatas yaitu men-scan baris program yan memiliki %* dengan
memanfaatkan source t=index($0,”/*”). Jadi membentuk suatu variable yang menyimpan
keseluruhan data. Dari penkondisian dengan state bahwa jika nilai t!=0 (atau terdapat string “/*”),
maka akan pemngeksekusi baris program selanjutnya.
Setelah itu akan menghapus komentar dalam bentuk bahasa c dan sejenisnya dari input. Dengan
cara mereplace pernyataan print $0 dengan pernyataan lainnya, user dapat melakukan pencarian
2 – D4 Teknik Komputer| 7609040007 21
selain mencari string komentar, yaitu seperti mencari matching dalam regular expression.
Nilai $0 yang telah diupdate digunakan untuk melakukan tes pattern dari bermacam-macam
keinginan dari programmer.
Analisa
{
if((getline tmp)>0){
print tmp
print $0
}else
print $0
}
2 – D4 Teknik Komputer| 7609040007 22
Analisa
{
if(NF==2&&$1=="@include"){
while((getline line<$2)>0)
print line
close($2)
}else
}
2 – D4 Teknik Komputer| 7609040007 23
Analisa
BEGIN{
"date" |getline current_time
close("date")
print "Report printed on"current_time
}
Source code diatas bertujuan untuk melakukan pengambilan suatu data menggunakan intruksi
getline, dimana hasil dari pengambilan data tersebut dimasukkan kedalam suatu variable yang
bernama current_time. Data yang hendak diambil menggunakan intruksi tersebut yaitu hasil dari
eksekusi command date yang kemudian data tersebut dikirim pada eksekusi baris program
selanjutnya menggunakan pipelining. Proses dari command date hendaknya dihentikan untuk
mengurangi proses dari system.
Untuk menampilkan nilai dari suatu variable, dimana variable tersebut bernilai suatu string dari
hasil getline command date, maka dapat digunakan intruksi print variable tersebut
2 – D4 Teknik Komputer| 7609040007 24
Kesimpulan
1. Untuk melakukan pembacaan terhadap suatu file, awk menyediakan beberapa intruksi, baik
yang bersifat text programming maupun terminal programming
2. Untuk mencetak data sesuai dengan record dan field secara vertical, maka programmer
memanfaatkan manipulasi terhadap index dari array
3. Untuk mendapatkan nilai dari suatu variable dan kemudian mencetaknya pada terminal, maka
dapat menggunakan intruksi getline dan printf
4. Apabila user hendak membaca suatu file berbasis text dengan menggunakan awk text
programming, maka yang paling mudah yaitu melakukan perulangan terhadap pembacaan data
setiap baris, dimana apabila tidak ditemui data, maka proses akan berhenti. Nilai dari file
tersebut setiap baris disimpan dalam suatu array, yang sewaktu-waktu dapat dipanggil oleh user
dengan memanggil nama dari array dan sesuai dengan index array tersebut