Sabtu, 27 Juni 2009
Melihat Hari Jawa pada Tanggal Lahir Seseorang dengan AWK
Sebelumnya kita bisa memakai daftar nama yang berisi tanggal lahir yang sudah kita buat pada posting sebelumnya.
jaka 1 4 1989
candra 19 6 1990
yusi 3 2 1988
yayuk 2 9 1987
irna 23 7 1990
tantri 8 9 1990
budi 20 11 1988
fita 28 12 1987
adit 17 10 1984
ahsan 9 3 1988
sugeng 7 8 1990
eko 3 5 1988
ferdian 11 7 1988
karina 7 9 1990
adi 15 2 1988
adya 27 12 1990
Simpan sebagai input.awk
Berikut program menggunaka awk, kita simpan dengan nama pasaran.awk.
{ thn=$4-1; bln=$3-1; thk=thn/4;
{ if(thn%4==1)
{ b=0.25 }
if(thn%4==2)
{ b=0.50 }
if(thn%4==3)
{ b=0.75 } }
{ d=thk-b;
thb=thn-d; }
{ if(bln==0 && $4%4!=0)
{ a=0 }
if(bln==1 && $4%4!=0)
{ a=31 }
if(bln==2 && $4%4!=0)
{ a=59 }
if(bln==3 && $4%4!=0)
{ a=90 }
if(bln==4 && $4%4!=0)
{ a=120 }
if(bln==5 && $4%4!=0)
{ a=151 }
if(bln==6 && $4%4!=0)
{ a=181 }
if(bln==7 && $4%4!=0)
{ a=212 }
if(bln==8 && $4%4!=0)
{ a=243 }
if(bln==9 && $4%4!=0)
{ a=273 }
if(bln==10 && $4%4!=0)
{ a=304 }
if(bln==11 && $4%4!=0)
{ a=334 } }
{ if(bln==0 && $4%4==0)
{ a=0 }
if(bln==1 && $4%4==0)
{ a=31 }
if(bln==2 && $4%4==0)
{ a=60 }
if(bln==3 && $4%4==0)
{ a=91 }
if(bln==4 && $4%4==0)
{ a=121 }
if(bln==5 && $4%4==0)
{ a=152 }
if(bln==6 && $4%4==0)
{ a=182 }
if(bln==7 && $4%4==0)
{ a=213 }
if(bln==8 && $4%4==0)
{ a=244 }
if(bln==9 && $4%4==0)
{ a=274 }
if(bln==10 && $4%4==0)
{ a=305 }
if(bln==11 && $4%4==0)
{ a=335 } }
jum=(thb*365)+(d*366)+a+$2;
{ if(jum%5==1)
{ f="Pahing" }
if(jum%5==2)
{ f="Pon" }
if(jum%5==3)
{ f="Wage" }
if(jum%5==4)
{ f="Kliwon" }
if(jum%5==0)
{ f="Legi" } }
{ if(jum%7==1)
{ printf("%-12s %2d %2d %d Minggu %s\n",$1,$2,$3,$4,f) }
if(jum%7==2)
{ printf("%-12s %2d %2d %d Senin %s\n",$1,$2,$3,$4,f) }
if(jum%7==3)
{ printf("%-12s %2d %2d %d Selasa %s\n",$1,$2,$3,$4,f) }
if(jum%7==4)
{ printf("%-12s %2d %2d %d Rabu %s\n",$1,$2,$3,$4,f) }
if(jum%7==5)
{ printf("%-12s %2d %2d %d Kamis %s\n",$1,$2,$3,$4,f) }
if(jum%7==6)
{ printf("%-12s %2d %2d %d Jumat %s\n",$1,$2,$3,$4,f) }
if(jum%7==0)
{ printf("%-12s %2d %2d %d Sabtu %s\n",$1,$2,$3,$4,f) } }
}
Kemudian kita eksekusi:
# awk -f pasaran.awk input.dat
Hasilnya
jaka 1 4 1989 Sabtu Wage
candra 19 6 1990 Selasa Pon
yusi 3 2 1988 Rabu Legi
yayuk 2 9 1987 Rabu Pahing
irna 23 7 1990 Senin Pahing
tantri 8 9 1990 Sabtu Wage
budi 20 11 1988 Minggu Pahing
fita 28 12 1987 Senin Wage
adit 17 10 1984 Rabu Pahing
ahsan 9 3 1988 Rabu Legi
sugeng 7 8 1990 Selasa Pahing
eko 3 5 1988 Selasa Legi
ferdian 11 7 1988 Senin Kliwon
karina 7 9 1990 Jumat Pon
adi 15 2 1988 Senin Pon
adya 27 12 1990 Kamis Wage
Fin!
Kamis, 25 Juni 2009
Menentukan Hari pada Tanggal Lahir dengan AWK
Seperti biasa kita buat file yang akan kita jadikan input, yakni berupa nama, tanggal lahir. Seperti contoh berikut:
jaka | 1 | 4 | 1989 |
candra | 19 | 6 | 1990 |
yusi | 3 | 2 | 1988 |
yayuk | 2 | 9 | 1987 |
irna | 23 | 7 | 1990 |
tantri | 8 | 9 | 1990 |
budi | 20 | 11 | 1988 |
fita | 28 | 12 | 1987 |
yoga | 19 | 1 | 1989 |
purna | 17 | 7 | 1989 |
adit | 17 | 10 | 1984 |
ahsan | 9 | 3 | 1988 |
sugeng | 7 | 8 | 1990 |
eko | 3 | 5 | 1988 |
endika | 14 | 1 | 1989 |
simpan sebagai input.dat
{
hari[1] = "Minggu"; hari[2] = "Senin"; hari[3] = "Selasa"; hari[4] = "Rabu"; hari[5] = "Kamis"; hari[6] = "Jumat"; hari[0] = "Sabtu";
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;
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 printf ("%-10s %-5d %-5d %-5d %-10s\n", $1, $2, $3, $4, hari[tothar]); }
Simpan file tadi dengan nama formula.awk, kemudian kita jalankan!
# awk -f formula.awk input.dat hasilnya..
jaka | 1 | 4 | 1989 | Jumat |
candra | 19 | 6 | 1990 | Senin |
yusi | 3 | 2 | 1988 | Selasa |
yayuk | 2 | 9 | 1987 | Selasa |
irna | 23 | 7 | 1990 | Minggu |
tantri | 8 | 9 | 1990 | Jumat |
budi | 20 | 11 | 1988 | Minggu |
fita | 28 | 12 | 1987 | Minggu |
yoga | 19 | 1 | 1989 | Selasa |
purna | 17 | 7 | 1989 | Sabtu |
adit | 17 | 10 | 1984 | Rabu |
ahsan | 9 | 3 | 1988 | Rabu |
sugeng | 7 | 8 | 1990 | Senin |
eko | 3 | 5 | 1988 | Selasa |
endika | 14 | 1 | 1989 | Kamis |
fin..!
Jumat, 19 Juni 2009
Membuat Bujur Sangkar Ajaib dengan menggunakan AWK
Tugas 4
Kita bisa memulai membuat file programnya sebagai berikut:
#! /bin/awk -f
# bujur-ajaib.awk
{ n=$1;
X=1;
Y=1;
Z=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;
X-=Y;
for(N=1; N<=n*n;)
{ if(ordo[a,b]==0)
{ X+=Y;
ordo[a,b] = X;
if(a==n) ordo[0,b] = X;
if(b==1) ordo[a,n+1] = X;
if(a==n && b==1 ) ordo[0,n+1] = X;
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;
X=X-Y+Z;
}
}
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 kita simpan program tersebut dengan nama misalnya bujur-ajaib.awk
Nah, setelah itu mari kita coba jalankan! Buka terminal, kemudian jalankan filenya!
$ awk -f bujur-ajaib.awk
maka akan muncul kursor berkedip pada terminal, masukkan saja nilai sembarang.. maka awk akan mengeksekusinya dan kemudian menampilkan pada layar. Misalnya kita ketik angka 1, maka akan muncul:
# awk -f bujur.awk
Kita bisa mengetikkan lagi angka berapapun, dengan syarat bukan angka bernilai negatif atau angka bernilai genap. Kemudian untuk keluar dengan menekan tombol Ctrl-D
Namun cara ini terdapat sedikit keganjilan pada jumlah nilai diagonalnya, karena akan ditambahkan dengan diagonal nilai sebelumnya.
$ awk -f bujur-ajaib.awk
1
1
1 1
1 1
3
16
8 1 6 15
3 5 7 15
4 9 2 15
15 15 15 16
5
81
17 24 1 8 15 65
23 5 7 14 16 65
4 6 13 20 22 65
10 12 19 21 3 65
11 18 25 2 9 65
65 65 65 65 65 81
7
256
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 256
Ctrl-D
Dengan cara lain, kita gunakan perintah echo. Perintah echo adalah perintah untuk menampilkan banyaknya baris pada teks. Akan tetapi disini akan dihitung sebagai ordo matriks yang akan kita buat.
$ echo 9 | awk -f bujur-ajaib.awk
369
47 58 69 80 1 12 23 34 45 369
57 68 79 9 11 22 33 44 46 369
67 78 8 10 21 32 43 54 56 369
77 7 18 20 31 42 53 55 66 369
6 17 19 30 41 52 63 65 76 369
16 27 29 40 51 62 64 75 5 369
26 28 39 50 61 72 74 4 15 369
36 38 49 60 71 73 3 14 25 369
37 48 59 70 81 2 13 24 35 369
369 369 369 369 369 369 369 369 369 369
Selesai...
Rabu, 03 Juni 2009
Menghitung Harga Barang dan Diskonnya dengan AWK
Terdapat sebuah tabel pembelian barang yakni perangkat komputer sebagai berikut:
Barang | Jumlah | Harga satuan |
CPU | 7 | 5500000 |
Printer | 5 | 1500000 |
Scaner | 8 | 2700000 |
Monitor | 10 | 3500000 |
Hardisk | 6 | 1200000 |
Mouse | 12 | 100000 |
Webcam | 15 | 1000000 |
sedangkan hasil yang diinginkan adalah sebagai berikut:
Barang | Jumlah | HargaSatuan | Total | Diskon | Bayar |
CPU | 7 | 5500000 | 38500000 | 3850000 | 34650000 |
Total adalah jumlah barang dikalikan harga barang
Diskon adalah sebagai berikut:
-bila membeli barang 5 atau lebih, maka diskon 10%
-bila membeli barang 10 atau lebih, maka diskon 20%
Bayar adalah total harga barang dikurangi diskon
Nah, yang perlu kita kerjakan terlebih dahulu kita bisa membuat tabel seperti diatas kemudian menyimpannya dalam sebuah direktori dengan nama misalnya barang.dat. Kemudian kita buat programnya...
Seperti ini..
BEGIN { printf "Barang Jumlah HargaSatuan Total Diskon Bayar\n" }
{ jumlah = $2
satuan = $3
total = $2 * $3 }
{ if ( $2 >= 5 && $2 < diskon =" total">= 10) {diskon = total *0.20} }
{ bayar = total - diskon }
{ printf "%-8s %6d %11d %12d %7d %8d\n", $1, $2, $3, total, diskon, bayar }
Kemudian kita simpan program tersebut dengan nama out.awk misalnya. Kita tinggal menjalankan programnya..
$ awk -f out.awk barang.dat
maka hasilnya..
Barang | Jumlah | HargaSatuan | 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 |
Harddisk | 6 | 1200000 | 7200000 | 720000 | 6480000 |
Mouse | 12 | 100000 | 1200000 | 240000 | 960000 |
Webcam | 15 | 1000000 | 15000000 | 3000000 | 12000000 |
selesaiii...!! :)
Mencetak Bilangan Prima Menggunakan AWK
Dalam matematika, bilangan prima adalah bilangan asli yang lebih besar dari 1, yang faktor pembaginya adalah 1 dan bilangan itu sendiri. 2 dan 3 adalah bilangan prima. 4 bukan bilangan prima karena 4 bisa dibagi 2. Sepuluh bilangan prima yang pertama adalah 2, 3, 5, 7, 11, 13, 17, 19, 23 dan 29.
Ada beberapa cara untuk mencari bilangan prima, salah satunya dengan menggunakan saringan Eratosthenes. Namun disini agak kesulitan mengimplementasikannya dengan menggunakan AWK untuk mencarinya. Berikut cara lain untuk mendapatkannya.
awk 'BEGIN{
for(i=2;i<=100;i++)
{
if(i==2 || i==3 || i==5 || i==7) print i ;
if(i%2!=0 && i%3!=0 && i%5!=0 && i%7!=0) print i
}
}'
Hehehe, lain kali akan saya update kalo saringan Eratosthenesnya udah bisa di AWK.. :)