Sebuah kalender jawa juga dapat dibuat dengan Bahasa AWK ini. Untuk membuatnya, kita memerlukan sebuah file yang berisikan data ( input ) yang akan di proses. Misalnya saja nama.txt. Kemudian, untuk programnya, kita taruh pada file yang berbeda. Misalnya saja file bernama Kalender. File ini berisi program untuk menanpilkan pasaran tersebut, yaitu :
{
#----nama hari------
hari[1] = "minggu"; hari[2] = "senin"; hari[3] = "selasa"; hari[4] = "rabu"; hari[5] = "kamis"; hari[6] = "jumat"; hari[0] = "sabtu";
#----jumlah hari-----
jumhar[0]=0; jumhar[1]=31; jumhar[2]=28; jumhar[3]=31; jumhar[4]=30; jumhar[5]=31; jumhar[6]=30; jumhar[7]=31; jumhar[8]=31; jumhar[9]=30; jumhar[10]=31; jumhar[11]=30; jumhar[12]=31;
#----pasaran-------
pasar[1] = "pahing" ; pasar[2] = "pon"; pasar [3]= "wage"; pasar[4] = "kliwon"; pasar[0] = "legi";
jum = 0
thn= $4-1
x = thn % 4
z = thn /4
if ( x==1 ){
a=z-0.25}
if ( x==2 ){
a=z-0.5}
if ( x==3 ){
a=z-0.75}
thnkab = a*366
thnb = (thn - a)*365
jumhari = thnkab + thnb
if ($4 % 4== 0){
for (i=1; i< $3; i++){
jum += jumhar[i] }
if ( $3 > 2){
tot = jumhari + jum + $2 +1}
else {
tot = jumhari + jum + $2 -1 }
}
else{
for (i = 1; i< $3; i++){
jum += jumhar[i] }
tot = jumhari + jum + $2 -1
}
tothar = tot % 7
totpas = tot % 5
printf ("%-10s %-5d %-5d %-5d %-10s %-10s\n", $1, $2, $3, $4, hari[tothar], pasar[totpas]);
}
Setelah itu, kita tinggal memberikan perintah pada jendela terminal. Yaitu :
awk -f Kalender nama.txt
Pada output yang dihasilkan akan berupa input pada file nama.txt beserta pasaran masing-masing.
Sabtu, 27 Juni 2009
Rabu, 24 Juni 2009
Menampilkan hari dan pasaran dengan inputan tanggal lahir
pertama kita buat file input.txt yang berisi nama dan tanggal lahir:
Finna 1 10 1989
Widi 12 11 1990
Bagus 2 12 1989
Hendra 22 1 1989
Heri 16 2 1989
Anjar 7 4 1987
Dimas 14 5 1988
Sandra 19 6 1989
Nana 21 7 1989
Diana 24 8 1988
Mike 24 9 1989
Budi 7 3 1988
Crash 24 1 1989
Reza 12 2 1988
Randi 29 3 1989
kemudian kita membuat rumus dengan file rumus.txt, adapun rumusnya sebagai berikut:
{ nm=$1;
tgl=$2;
bln=$3;bln1=int(bln)
tahun=$4;
if (bln1<=12&&bln1!=0) {
thn=tahun-1;
thk=thn/4;
thb=thn-int(thk);
jumth=tahun%4;
bulan=bln-1;
if (jumth==0){
if(bulan==0)
i=31;
if(bulan==1)
i=62;
if(bulan==2)
i=91;
if(bulan==3)
i=122;
if(bulan==4)
i=152;
if(bulan==5)
i=183;
if(bulan==6)
i=213;
if(bulan==7)
i=244;
if(bulan==8)
i=275;
if(bulan==9)
i=305;
if(bulan==10)
i=336;
if(bulan==11)
i=366; }
else {
if(bulan==0)
i=31;
if(bulan==1)
i=62;
if(bulan==2)
i=90;
if(bulan==3)
i=121;
if(bulan==4)
i=151;
if(bulan==5)
i=182;
if(bulan==6)
i=212;
if(bulan==7)
i=243;
if(bulan==8)
i=274;
if(bulan==9)
i=304;
if(bulan==10)
i=335;
if(bulan==11)
i=365; }
kab=366*int(thk);
br=365*thb;
tothar=(kab)+(br)+i+tgl;
hr=tothar%7;
printf(nm); {
if(hr==0)
printf("\t\tHari = RABU\n");
else if(hr==1)
printf("\t\tHari = KAMIS\n");
else if(hr==2)
printf("\t\tHari = JUM'AT\n");
else if(hr==3)
printf("\t\tHari = SABTU\n");
else if(hr==4)
printf("\t\tHari = MINGGU\n");
else if(hr==5)
printf("\t\tHari = SENIN\n");
else
printf("\t\tHari = SELASA\n"); }
psr=tothar%5;{
if(psr==0)
printf("\t\tPasaran = KLIWON\n");
else if(psr==1)
printf("\t\tPasaran = LEGI\n");
else if(psr==2)
printf("\t\tPasaran = PAHING\n");
else if(psr==3)
printf("\t\tPasaran = PON\n");
else
printf("\t\tPasaran = WAGE\n");
} } }
Jika semua sudah selesai kita lakukan barulah kita jalankan ke 2 file tersebut dengan perintah
$ awk -f rumus.txt input.txt
Finna 1 10 1989
Widi 12 11 1990
Bagus 2 12 1989
Hendra 22 1 1989
Heri 16 2 1989
Anjar 7 4 1987
Dimas 14 5 1988
Sandra 19 6 1989
Nana 21 7 1989
Diana 24 8 1988
Mike 24 9 1989
Budi 7 3 1988
Crash 24 1 1989
Reza 12 2 1988
Randi 29 3 1989
kemudian kita membuat rumus dengan file rumus.txt, adapun rumusnya sebagai berikut:
{ nm=$1;
tgl=$2;
bln=$3;bln1=int(bln)
tahun=$4;
if (bln1<=12&&bln1!=0) {
thn=tahun-1;
thk=thn/4;
thb=thn-int(thk);
jumth=tahun%4;
bulan=bln-1;
if (jumth==0){
if(bulan==0)
i=31;
if(bulan==1)
i=62;
if(bulan==2)
i=91;
if(bulan==3)
i=122;
if(bulan==4)
i=152;
if(bulan==5)
i=183;
if(bulan==6)
i=213;
if(bulan==7)
i=244;
if(bulan==8)
i=275;
if(bulan==9)
i=305;
if(bulan==10)
i=336;
if(bulan==11)
i=366; }
else {
if(bulan==0)
i=31;
if(bulan==1)
i=62;
if(bulan==2)
i=90;
if(bulan==3)
i=121;
if(bulan==4)
i=151;
if(bulan==5)
i=182;
if(bulan==6)
i=212;
if(bulan==7)
i=243;
if(bulan==8)
i=274;
if(bulan==9)
i=304;
if(bulan==10)
i=335;
if(bulan==11)
i=365; }
kab=366*int(thk);
br=365*thb;
tothar=(kab)+(br)+i+tgl;
hr=tothar%7;
printf(nm); {
if(hr==0)
printf("\t\tHari = RABU\n");
else if(hr==1)
printf("\t\tHari = KAMIS\n");
else if(hr==2)
printf("\t\tHari = JUM'AT\n");
else if(hr==3)
printf("\t\tHari = SABTU\n");
else if(hr==4)
printf("\t\tHari = MINGGU\n");
else if(hr==5)
printf("\t\tHari = SENIN\n");
else
printf("\t\tHari = SELASA\n"); }
psr=tothar%5;{
if(psr==0)
printf("\t\tPasaran = KLIWON\n");
else if(psr==1)
printf("\t\tPasaran = LEGI\n");
else if(psr==2)
printf("\t\tPasaran = PAHING\n");
else if(psr==3)
printf("\t\tPasaran = PON\n");
else
printf("\t\tPasaran = WAGE\n");
} } }
Jika semua sudah selesai kita lakukan barulah kita jalankan ke 2 file tersebut dengan perintah
$ awk -f rumus.txt input.txt
Kamis, 18 Juni 2009
Magic Square
Untuk membuat magic square dalam AWK Languages, hal pertama yang kita lakukan adalah membuat sebuah file bernama MAGICSQUARE.txt. Kemudian isi file tersebut dengan perintah di bawah ini :
{ ordo[55,55];
n=$1;
K=1;
L=1;
M=1;
for(a=0; a<=n+2; a++)
{ for(b=0; b<=n+2; b++)
ordo[a,b] = 0;
}
a=1; b=(n+1) / 2;
K-=L;
for(N=1; N<=n*n;)
{ if(ordo[a,b]==0)
{ K+=L;
ordo[a,b] = K;
if(a==n) ordo[0,b] = K;
if(b==1) ordo[a,n+1] = K;
if(a==n && b==1 ) ordo[0,n+1] = K;
a--; b++; N++;
if(a==0&&b==n+1) continue;
else
{
if (a==0) a=n;
if(b==n+1) b=1;
}
}
else
{
a+=2;
b-=1;
K=K-L+M;
}
}
for(a=1; a<=n; a++)
T1+=ordo[a,n+1-a];
for(a=1; a<=n*5;a++)
printf(" ");
printf("%5d\n\n",T1);
for(a=1;a<=n+1;a++)
{
for(b=1; b<=n; b++)
{
printf("%5d", ordo[a,b]);
ordo[a,n+2] += ordo[a,b];
ordo[n+1,b] += ordo[a,b];
}
T2 += ordo[a,b];
if(a==n+1) ordo[a,n+2] = T2;
printf("%5d\n\n",ordo[a,n+2]);
}
}
Kemudian simpan file tersebut. Pada jendela terminal, kita berikan perintah untuk memanggil file MAGICSQUARE.txt :
echo 7 | awk -f bujursangkar.txt
Sehingga hasil yang ditampilkan adalah :
30 39 48 1 10 19 28 175
38 47 7 9 18 27 29 175
46 6 8 17 26 35 37 175
5 14 16 25 34 36 45 175
13 15 24 33 42 44 4 175
21 23 32 41 43 3 12 175
22 31 40 49 2 11 20 175
175 175 175 175 175 175 175 175
NOTE : echo 7 yang dimaksud pada perintah di atas adalah ordo 7x7. Sehingga apabila kita ingin membuat ordo selain 7 hanya tinggal menggantinya saja...
{ ordo[55,55];
n=$1;
K=1;
L=1;
M=1;
for(a=0; a<=n+2; a++)
{ for(b=0; b<=n+2; b++)
ordo[a,b] = 0;
}
a=1; b=(n+1) / 2;
K-=L;
for(N=1; N<=n*n;)
{ if(ordo[a,b]==0)
{ K+=L;
ordo[a,b] = K;
if(a==n) ordo[0,b] = K;
if(b==1) ordo[a,n+1] = K;
if(a==n && b==1 ) ordo[0,n+1] = K;
a--; b++; N++;
if(a==0&&b==n+1) continue;
else
{
if (a==0) a=n;
if(b==n+1) b=1;
}
}
else
{
a+=2;
b-=1;
K=K-L+M;
}
}
for(a=1; a<=n; a++)
T1+=ordo[a,n+1-a];
for(a=1; a<=n*5;a++)
printf(" ");
printf("%5d\n\n",T1);
for(a=1;a<=n+1;a++)
{
for(b=1; b<=n; b++)
{
printf("%5d", ordo[a,b]);
ordo[a,n+2] += ordo[a,b];
ordo[n+1,b] += ordo[a,b];
}
T2 += ordo[a,b];
if(a==n+1) ordo[a,n+2] = T2;
printf("%5d\n\n",ordo[a,n+2]);
}
}
Kemudian simpan file tersebut. Pada jendela terminal, kita berikan perintah untuk memanggil file MAGICSQUARE.txt :
echo 7 | awk -f bujursangkar.txt
Sehingga hasil yang ditampilkan adalah :
30 39 48 1 10 19 28 175
38 47 7 9 18 27 29 175
46 6 8 17 26 35 37 175
5 14 16 25 34 36 45 175
13 15 24 33 42 44 4 175
21 23 32 41 43 3 12 175
22 31 40 49 2 11 20 175
175 175 175 175 175 175 175 175
NOTE : echo 7 yang dimaksud pada perintah di atas adalah ordo 7x7. Sehingga apabila kita ingin membuat ordo selain 7 hanya tinggal menggantinya saja...
Senin, 01 Juni 2009
Perhitungan Harga Barang
perhitungan harga barang ini didasarkan pada data yang telah tersedia, data tersebut dimasukkan dalam sebuah file yang disimpan dalam direktori home dari user. berikut langkah membuat sriptnya :
1. Membuat file dengan nama harga_barang pada direktori home, berikut datanya
CPU 7 5500000
printer 5 1500000
scanner 8 2700000
Monitor 10 3500000
Hardisk 6 1200000
Mouse 12 100000
Webcam 15 1000000
2. dengan menggunakan script awk dibawah ini unutk menghitung dengan ketentuan sebagai beriukut :
-bila membeli barang 5 atau lebih, maka diskon 10%
-bila membeli barang 10 atau lebih, maka diskon 20%
awk 'BEGIN{printf "%-10s %-10s %-20s %-10s %-10s %s\n", "BARANG","JUMLAH","HARGA SATUAN","TOTAL","DISKON","BAYAR"}{if($2>=5 && $2 <10){printf "%-10s %-10s %-20s %-10s %-10s %s\n", $1,$2,$3,$4=$2*$3,$5=0.1*$4,$6=$4-$5 }}
{if($2>=10){printf "%-10s %-10s %-20s %-10s %-10s %s\n", $1,$2,$3,$4=$2*$3,$5=0.2*$4,$6=$4-$5 }}' harga_barang
3. hasilnya :
BARANG JUMLAH HARGA SATUAN TOTAL DISKON BAYAR
CPU 7 5500000 38500000 3850000 34650000
printer 5 1500000 7500000 750000 6750000
scanner 8 2700000 21600000 2160000 19440000
Monitor 10 3500000 35000000 7000000 28000000
Hardisk 6 1200000 7200000 720000 6480000
Mouse 12 100000 1200000 240000 960000
Webcam 15 1000000 15000000 3000000 12000000
1. Membuat file dengan nama harga_barang pada direktori home, berikut datanya
CPU 7 5500000
printer 5 1500000
scanner 8 2700000
Monitor 10 3500000
Hardisk 6 1200000
Mouse 12 100000
Webcam 15 1000000
2. dengan menggunakan script awk dibawah ini unutk menghitung dengan ketentuan sebagai beriukut :
-bila membeli barang 5 atau lebih, maka diskon 10%
-bila membeli barang 10 atau lebih, maka diskon 20%
awk 'BEGIN{printf "%-10s %-10s %-20s %-10s %-10s %s\n", "BARANG","JUMLAH","HARGA SATUAN","TOTAL","DISKON","BAYAR"}{if($2>=5 && $2 <10){printf "%-10s %-10s %-20s %-10s %-10s %s\n", $1,$2,$3,$4=$2*$3,$5=0.1*$4,$6=$4-$5 }}
{if($2>=10){printf "%-10s %-10s %-20s %-10s %-10s %s\n", $1,$2,$3,$4=$2*$3,$5=0.2*$4,$6=$4-$5 }}' harga_barang
3. hasilnya :
BARANG JUMLAH HARGA SATUAN TOTAL DISKON BAYAR
CPU 7 5500000 38500000 3850000 34650000
printer 5 1500000 7500000 750000 6750000
scanner 8 2700000 21600000 2160000 19440000
Monitor 10 3500000 35000000 7000000 28000000
Hardisk 6 1200000 7200000 720000 6480000
Mouse 12 100000 1200000 240000 960000
Webcam 15 1000000 15000000 3000000 12000000
Rabu, 13 Mei 2009
Menentukan NILAI IPS
Pada pertemuan ini, kita akan membuat suatu program yang bertujuan untuk menghitung nilai IP Sementara dengan menggunakan AWK. Untuk contoh program dapat dilihat seperti di bawah ini :
awk' { NA=0; NA=($5+$6+$7)/3}
{{if(81<=NA && NA<=100){print $1,$2, $3,$4,$5,$6,$7,NA, "A", $8= 4*$2}}
{{if(71<=NA && NA<=80){print $1,$2, $3,$4,$5,$6,$7,NA, "B", $8= 3*$2}}
{{if(61<=NA && NA<=70){print $1,$2, $3,$4,$5,$6,$7,NA, "C", $8= 2*$2}}
{{if(51<=NA && NA<=60){print $1,$2, $3,$4,$5,$6,$7,NA, "D", $8= 1*$2}}
{{if(0<=NA && NA<=50){print $1,$2, $3,$4,$5,$6,$7,NA, "E", $8= 0*$2}}
BEGIN {jumlah=0}
{jumlah=jumlah+$4}
END { print "Jumlah SKS= ", jumlah}
BEGIN { NT=0 }
{NT=NT+$8}
END{print " Nilai total = ", NT}
BEGIN { IPS =0 }
{ IPK=NT/jumlah}
END {print " IP Sementara=", IPS}' nilai
Nilai yang dimaksud merupakan file yang berisi data-data awal sebelum data tersebut terproses oleh program.
No. Nama Mata Kuliah Jumlah SKS Nilai Tugas Nilai UTS Nilai UAS
1. Randy AWK 3 70 80 75
2. Randy Rangkaian 6 80 89 88
3. Randy OS 3 55 90 67
4. Randy B.Inggris 2 80 80 89
5. Randy Matematika 3 3 75 82 80
Tabel di atas, kita simpan pada file yang diberi nama nilai. Nama file ini sesuai dengan user. sehingga dalam program kita tinggal memanggil file ini.
awk' { NA=0; NA=($5+$6+$7)/3}
{{if(81<=NA && NA<=100){print $1,$2, $3,$4,$5,$6,$7,NA, "A", $8= 4*$2}}
{{if(71<=NA && NA<=80){print $1,$2, $3,$4,$5,$6,$7,NA, "B", $8= 3*$2}}
{{if(61<=NA && NA<=70){print $1,$2, $3,$4,$5,$6,$7,NA, "C", $8= 2*$2}}
{{if(51<=NA && NA<=60){print $1,$2, $3,$4,$5,$6,$7,NA, "D", $8= 1*$2}}
{{if(0<=NA && NA<=50){print $1,$2, $3,$4,$5,$6,$7,NA, "E", $8= 0*$2}}
BEGIN {jumlah=0}
{jumlah=jumlah+$4}
END { print "Jumlah SKS= ", jumlah}
BEGIN { NT=0 }
{NT=NT+$8}
END{print " Nilai total = ", NT}
BEGIN { IPS =0 }
{ IPK=NT/jumlah}
END {print " IP Sementara=", IPS}' nilai
Nilai yang dimaksud merupakan file yang berisi data-data awal sebelum data tersebut terproses oleh program.
No. Nama Mata Kuliah Jumlah SKS Nilai Tugas Nilai UTS Nilai UAS
1. Randy AWK 3 70 80 75
2. Randy Rangkaian 6 80 89 88
3. Randy OS 3 55 90 67
4. Randy B.Inggris 2 80 80 89
5. Randy Matematika 3 3 75 82 80
Tabel di atas, kita simpan pada file yang diberi nama nilai. Nama file ini sesuai dengan user. sehingga dalam program kita tinggal memanggil file ini.
Bilangan Prima
Untuk menampilkan suatu bilangan prima dalam AWK, kita dapat menggunakan aturan assosiative array. seperti pada contoh program AWK di bawah ini :
$ ls -l | awk 'BEGIN {
Bil[100];
}
END {
for (i=2;i<=97;i++ ){ if(i%i==0 && i%2!=0 && i%3!=0 && i%4=0 && i%5!=0 && i%6!=0 && i%7!=0 && i%8!=0 && i%9!=0 || i==3 || i==5 || i==7|| i==2) {print Bil[i],i;} } }'
Apabila program tersebut dijalankan pada terminal, maka output yang dihasilkan adalah bilangan prima dimulai dari 2 hingga 100.
$ ls -l | awk 'BEGIN {
Bil[100];
}
END {
for (i=2;i<=97;i++ ){ if(i%i==0 && i%2!=0 && i%3!=0 && i%4=0 && i%5!=0 && i%6!=0 && i%7!=0 && i%8!=0 && i%9!=0 || i==3 || i==5 || i==7|| i==2) {print Bil[i],i;} } }'
Apabila program tersebut dijalankan pada terminal, maka output yang dihasilkan adalah bilangan prima dimulai dari 2 hingga 100.
Rabu, 18 Maret 2009
Review materi pemrograman Pertemuan 1
RANGKUMAN AWK LANGUAGES
Bahasa AWK pertama kali dibuat pada tahun 1977 oleh Al Aho, Peter Weinberger, dan Brien Kernigan. AWK adalah bahasa pemrograman untuk memanipulasi data secara bersama hanya dengan program yang singkat. Hal ini dikarenakan pada bahasa AWK, kita tidak memerlukan suatu deklarasi untuk variable. Selain itu, AWK juga akan secara otomatis melakukan handles input, field splitting, initialization, dan memory management.
Kemudian pada tahun 1985, terdapat new AWK, tau NAWK. NAWK ini digunakan untuk pengembangan program yang lebih besar. Pada NAWK juga terdapat fitur tambahan, yaitu:
• Dynamic regular expression
• Additional built-in functions and variable.
• New operator and statement
• Input more than 1 files
• Access to command line arguments
• Improve error message
Structure dariprogram AWK adalah :
• BEGIN segment ( optional )
• Pattern-action pairs ( inputing data )
• END segment ( optional )
Pattern-action structure :
• Pattern terdaftar secara singkat, sedangkan actions diawali dan diakhiri oleh {}.
Cara menjalankan program AWK :
• AWK ‘program’ input_file(s) : program dan input merupakan perintah.
• AWK ‘program’ : program bertindak sebagai perintah, input berasal dari standart input.
• AWK –f program_file_name input_files : program dibaca dari suatu file.
Simple output dari AWK :
• Dapat menampilkan output seluruh line apabila tidak terdapat pattern.
• Dapat menampilkan multiple items dengan 1 print statement.
• Dapat menampilkan number of field ( NF )
• Dapat melakukan perhitungan pada nilai field dan menampilkannya sebagai output.
• Dapat menampilkan line numbers yang kita inginkan ( NR )
• Dapat menambahkan text pada output.
Penyimpan Output dari AWK :
• Lining Up Fields ( printf=untuk menghasilkan output terformat )
AWK sebagi seleksi :
• Berdasarkan perbandingan
• Berdasarkan perhitungan
• Berdasarkan isi text
• Berdasarkan kombinasi patterns.
AWK sebagai data validation
AWK sebagai program penghitungan
.
AWK sebagai Handling Text
AWK berisikan number of built-in functions.
AWK sebagai Flow Control statements untuk membuat keputusan dan menu;lis perulangan.
AWK sebagai Loop Control
AWK dilengkapi dengan arrays untuk menyimpan nilai data yang berhubungan.
Kemudian pada tahun 1985, terdapat new AWK, tau NAWK. NAWK ini digunakan untuk pengembangan program yang lebih besar. Pada NAWK juga terdapat fitur tambahan, yaitu:
• Dynamic regular expression
• Additional built-in functions and variable.
• New operator and statement
• Input more than 1 files
• Access to command line arguments
• Improve error message
Structure dariprogram AWK adalah :
• BEGIN segment ( optional )
• Pattern-action pairs ( inputing data )
• END segment ( optional )
Pattern-action structure :
• Pattern terdaftar secara singkat, sedangkan actions diawali dan diakhiri oleh {}.
Cara menjalankan program AWK :
• AWK ‘program’ input_file(s) : program dan input merupakan perintah.
• AWK ‘program’ : program bertindak sebagai perintah, input berasal dari standart input.
• AWK –f program_file_name input_files : program dibaca dari suatu file.
Simple output dari AWK :
• Dapat menampilkan output seluruh line apabila tidak terdapat pattern.
• Dapat menampilkan multiple items dengan 1 print statement.
• Dapat menampilkan number of field ( NF )
• Dapat melakukan perhitungan pada nilai field dan menampilkannya sebagai output.
• Dapat menampilkan line numbers yang kita inginkan ( NR )
• Dapat menambahkan text pada output.
Penyimpan Output dari AWK :
• Lining Up Fields ( printf=untuk menghasilkan output terformat )
AWK sebagi seleksi :
• Berdasarkan perbandingan
• Berdasarkan perhitungan
• Berdasarkan isi text
• Berdasarkan kombinasi patterns.
AWK sebagai data validation
AWK sebagai program penghitungan
.
AWK sebagai Handling Text
AWK berisikan number of built-in functions.
AWK sebagai Flow Control statements untuk membuat keputusan dan menu;lis perulangan.
AWK sebagai Loop Control
AWK dilengkapi dengan arrays untuk menyimpan nilai data yang berhubungan.
Langganan:
Postingan (Atom)