Sabtu, 27 Juni 2009

Melihat Hari Jawa pada Tanggal Lahir Seseorang dengan AWK

Tugas 6

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

Tugas 5

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

Tugas 3

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

Tugas 2

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

Tugas 1

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

AWK - the original from AT&T
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 )
Meski begitu operasi dari AWK bisa menjadi sangat kompleks, namun sintaks dari AWK akan selalu:
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.