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.. :)
Selasa, 12 Mei 2009
Menghitung Indeks Prestasi menggunakan AWK
Dalam AWK kita juga bisa menghitung IP, bagaimana caranya? berikut contohnya:
Sebelum kita membuat perhitungannya, seperti biasa kita buat terlebih dahulu tabel yang berisikan daftar prestasi mahasiswa, misalnya tabel prestasi Joko dari Teknik Komputer seperti berikut:
1 | JokoSusilo | BahasaInggris5 | 2 | 80 | 85 | 75 |
2 | JokoSusilo | BahasaIndonesia | 2 | 75 | 80 | 90 |
3 | JokoSusilo | PengolahanSinyalDigital | 2 | 80 | 70 | 75 |
4 | JokoSusilo | SistemEmbedded2 | 2 | 70 | 80 | 80 |
5 | JokoSusilo | KonsepJaringan | 2 | 80 | 85 | 90 |
6 | JokoSusilo | RekayasaPerangkatLunak | 2 | 90 | 90 | 90 |
7 | JokoSusilo | SistemPengaturanKomputer1 | 2 | 75 | 75 | 90 |
8 | JokoSusilo | P.PengolahanSinyalDigital | 2 | 80 | 80 | 80 |
9 | JokoSusilo | P.SistemEmbedded2 | 2 | 75 | 85 | 70 |
10 | JokoSusilo | P.KonsepJaringan | 2 | 80 | 65 | 75 |
11 | JokoSusilo | P.RekayasaPerangkatLunak | 2 | 75 | 80 | 90 |
12 | JokoSusilo | P.SistemPengaturanKomputer1 | 2 | 70 | 70 | 75 |
Dimana tabel diatas menunjukkan bahwa pada kolom pertama adalah kolom nomor, kolom kedua adalah nama Joko yakni Joko Susilo dan ketiga nama matakuliah, diikuti kolom keempat adalah jumlah sks, kelima nilai tugas, nilai uts kemudian terakhir nilai uas.
Disini yang harus kita cari adalah nilai per mata kuliah, kemudian kriteria nilai tersebut yakni dalam huruf, kemudian Indeks Prestasi mahasisw per Semester tersebut, yang dapat kita hitung dengan formula:
IPS = Xn/ Xs
IPS : indeks prestasi per semester
Xn : jumlah nilai untuk semua mata kuliah
Xs : total sks
Skala Penilaian Hasil Belajar
NILAI ANGKA | NILAI HURUF | NILAI NUMERIK | KATEGORI |
80 - 100 | A | 4 | Istimewa |
71 - 80 | AB | 3,5 | Baik Sekali |
66 - 70 | B | 3 | Baik |
61 - 65 | BC | 2,5 | Cukup Baik |
56 - 60 | C | 2 | Cukup |
41 - 55 | D | 1 | Kurang |
0 - 40 | E | 0 | Kurang Sekali |
awk '
BEGIN {print "\nMenghitung Indeks Prestasi semester"}
{print $0; $8 = ($5 + $6 + $7) / 3; print $8;
if($8>80) print $9,"A";
else if($8 > 70 && $8 <= 80) print $9,"AB";
else if($8 > 65 && $8 <= 70) print $9,"B";
else if($8 > 60 && $8 <= 65) print $9,"BC";
else if($8 > 55 && $8 <= 60) print $9,"C";
else if($8 > 40 && $8 <= 55) print $9,"D";
else if($8 <= 40) print $9,"E"}
{print $10}
{ if($8 > 80) num = 4;
else if($8 > 70 && $8 <= 80) num = 3.5;
else if($8 > 65 && $8 <= 70) num = 3;
else if($8 > 60 && $8 <= 65) num = 2.5;
else if($8 > 55 && $8 <= 60) num = 2;
else if($8 > 40 && $8 <= 55) num = 1;
else if($8 <= 40) num = 0}
{nx =+ num}
{nsks =+ $4}
END { print "\nIPS ="nx/nsks }' ip_joko
Hasilnya akan seperti demikian:
Menghitung Indeks Prestasi semester | ||||||
1 | JokoSusilo | BahasaInggris5 | 2 | 80 | 85 | 75 |
80 |
|
|
|
|
|
|
AB |
|
|
|
|
|
|
|
|
|
|
|
|
|
2 | JokoSusilo | BahasaIndonesia | 2 | 75 | 80 | 90 |
81.67 |
|
|
|
|
|
|
A |
|
|
|
|
|
|
|
|
|
|
|
|
|
3 | JokoSusilo | PengolahanSinyalDigital | 2 | 80 | 70 | 75 |
75 |
|
|
|
|
|
|
AB |
|
|
|
|
|
|
|
|
|
|
|
|
|
4 | JokoSusilo | SistemEmbedded2 | 2 | 70 | 80 | 80 |
76.67 |
|
|
|
|
|
|
AB |
|
|
|
|
|
|
|
|
|
|
|
|
|
5 | JokoSusilo | KonsepJaringan | 2 | 80 | 85 | 90 |
85 |
|
|
|
|
|
|
A |
|
|
|
|
|
|
|
|
|
|
|
|
|
6 | JokoSusilo | RekayasaPerangkatLunak | 2 | 90 | 90 | 90 |
90 |
|
|
|
|
|
|
A |
|
|
|
|
|
|
|
|
|
|
|
|
|
7 | JokoSusilo | SistemPengaturanKomputer1 | 2 | 75 | 75 | 90 |
80 |
|
|
|
|
|
|
AB |
|
|
|
|
|
|
|
|
|
|
|
|
|
8 | JokoSusilo | P.PengolahanSinyalDigital | 1 | 80 | 80 | 80 |
80 |
|
|
|
|
|
|
AB |
|
|
|
|
|
|
|
|
|
|
|
|
|
9 | JokoSusilo | P.SistemEmbedded2 | 1 | 75 | 85 | 70 |
76.67 |
|
|
|
|
|
|
AB |
|
|
|
|
|
|
|
|
|
|
|
|
|
10 | JokoSusilo | P.KonsepJaringan | 1 | 80 | 65 | 75 |
73.33 |
|
|
|
|
|
|
AB |
|
|
|
|
|
|
|
|
|
|
|
|
|
11 | JokoSusilo | P.RekayasaPerangkatLunak | 1 | 75 | 80 | 90 |
81.67 |
|
|
|
|
|
|
A |
|
|
|
|
|
|
|
|
|
|
|
|
|
12 | JokoSusilo | P.SistemPengaturanKomputer1 | 1 | 70 | 70 | 75 |
71.67 |
|
|
|
|
|
|
AB |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IPS =3.5 |
Rabu, 18 Maret 2009
Summary - AWK
NAWK - A newer, improved version from AT&T
GAWK - The Free Software foundation's version
History - AWK dibuat pada tahun 1970 oleh Aho, Peter Weinberger dan Brian Kernigan.
AWK, merupakan bahasa pemrograman yang berfungsi untuk menangani manipulasi data teks secara bersamaan dengan hanya menggunakan sedikit baris program. AWK tidak memerlukan deklarasi untuk variabel, oleh karena itu pemrograman ini menjadi singkat.
AWK menangani input, pemisahan field, inisialisasi, dan manajemen memori secara otomatis, tidak memerlukan deklarasi variable.
Struktur AWK
- BEGIN segment ( optional )
- Pattern-action pairs ( inputing data )
- END segment ( optional )
awk '(pattern + action)' '(filenames)'
Pattern merepresentasikan pola yang ingin dicari oleh AWK dan action merupakan
action yang ingin dilakukan jika pola yang sesuai ditemui.
Cara Menjalankan 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.
Penyimpan Output AWK
• Lining Up Fields ( printf=untuk menghasilkan output terformat )
Output AWK
• 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.
• Dapat menampilkan output seluruh line apabila tidak terdapat pattern.
• Dapat menampilkan multiple items dengan 1 print statement.