gawk and sed

assalamu’alaikum warahmatullahi wabarakatuh…..


ketika sampai di sini saya disuruh belajar menggunakan gawk dan sed dulu, dua tool text processing yang ternyata sangat-sangat berguna di sini.

pertama kita akan membahas dulu tentang sed. salah satu fitur sed yang sering digunakan adalah tentang subsitusi karakter dalam keseluruhan teks file.

misalnya kita ingin mengganti kata raisa dengan Raisa di sebuah file teks

# cat raisa |sed ‘s/raisa/Raisa/g’ > raisa2

# cat raisa2
Raisa Andriana

bila kita ingin melakukan penggantian lebih dari satu kata dalam sebuah file ?

# cat raisa2
Raisa Andriana
# cat raisa2  |sed ‘s/Raisa/A/; s/Andriana/B/’
A B

misalnya kita ingin mengekstrak baris tertentu dari sebuah file kemudian mengganti karakter dengan spasi menggunakan sed

# grep E0 *out | sed ‘s/_/ /; s/\./ /2’

kemudian tentang gawk. gawk ternyata sangat powerful untuk mengekstrak kolom, melakukan operasi matematika dalam sebuah teks file. sebagai contoh : misalnya kita memiliki file koordinat kartesian dan ingin mengubahnya menjadi koordinat fraksional. katakanlah kita memiliki file koordinat kartesian yang bernama rec.xyz dan ingin mengubahnya menjadi koordinat fraksional dengan koordinat sumbu z tetap berupa koordinat kartesian

untuk menghilangkan blank lines kita dapat menggunakan perintah ini :

sed ‘/^\s*$/d’ tes > tes2

# cat rec.xyz | gawk ‘{print $1  ” ” $2/16.5  ”  ” $3/14.28   ” ” $4}’

simpel kan🙂

oh ya syntax di gawk selalu berada dalam  ‘{}’ misalnya gawk ‘{baris perintah}’ file

untuk mengekstrak kolom yang kita inginkan dari sebuah file teks dapat menggunakan perintah berikut :

# gawk ‘{printf(“%lf\t%lf\n”,$1,$2)}’ file-teks

gawk bisa digunakan untuk melakukan operasi matematika misalnya menambah semua angka dengan angka random. misalnya kita ingin menambahkan bilangan pada kolom 4, 5 6 dengan angka random

# gawk ‘{print $1  ”  ”   $2  ”  ” $3  ”  ” $4+0.02*rand()-0.5)  ”  ” $5+0.02*rand()-0.5)  ”  ” $6+0.02*rand()-0.5)  ” 0.0 0.0 0.0  0.0 0.0 0.0   ”  $4+0.02*rand()-0.5)  ”  ” $5+0.02*rand()-0.5)  ”  ” $6+0.02*rand()-0.5)  ” 0.0 0.0 0.0  0.0 0.0 0.0   ”      }’ al2o3_big_box_shifted.rst

atau membuat rata-rata

# gawk ‘{ sum += $1 }; END { print sum/NR }’ file

misalnya kita memiliki file teks dengan 1 kolom yang isinya angka-angka terus kita ingin membuat rata-rata dari data tsb

# gawk juga dapat melakukan syntax bahasa C

contohnya :

# gawk ‘{ x[NR] = $4; y[NR] = $5; z[NR] = $6;};
END{

for (i=1; i<= NR; i++)
{
for (j=i+1; j <= NR; j++)
{
dx=x[i]-x[j];
dy=y[i]-y[j];
dz=z[i]-z[j];

r=sqrt(dx*dx+dy*dy+dz*dz);

if (r < 1.0)
{
print “ALARM!!” ”   ” i”   ” j ”    ” sqrt(dx*dx+dy*dy+dz*dz);
}
}
}

}’  $1

algoritma syntax tsb :

1. membaca koordinat x, y dan z kemudian menyimpannya.

2 . menghitung selisih jarak antara x1- x2, y1-y2 dan z1-z2

3 menghitung jarak antara 2 partikel, jika jaraknya kurang 1 angstroem maka akan diberi tanda “ALARM”

gawk juga bisa melakukan perintah kondisional dan operasi matematika

# cat al2o3_cryst_cell.xyz |gawk ‘{if($2<=2.380131){print $1 ”  ” $2+4.76 ”  ” $3 ”  ” $4} else {print $0}}’ > rec.xyz

misalnya : kita membaca file xyz apabila koordinaat di sumbu  x kurang dari sama dengan 2.380131 maka koordinat dalam sumbu  x akan ditambah dengan 4.76.

gawk juga bisa melakukan perintah kondisional misalnya if … else

# cat coba.xyz |gawk ‘{if($3>=3.84020){print $1 ”  ” $2 ”  ” $3-14.28 ”  ” $4} else {print $0}}’ > rec.xyz

yang paling saya suka adalah gawk bisa membuat file teks dengan beberapa puluh kolom dengan cepat

contohnya :

# cat -n coba |gawk ‘{print  $2   ”    ”   $1   ”    ”    $2$2   ”    ”     $3    ”    ”    $4     ”     ”   $5   ”    0.0  0.0  0.0  0.0   0.0   0.0    ”       $3     ”   ”  $4    ”   ”    $5    ”   0.0   0.0   0.0   0.0   0.0   0.0  “}’  > coba3.rst

dalam perintah di atas kita akan membuat file teks dengan 20-an kolom🙂

atau bisa juga menggunakan perintah printf

# cat file.xyz| gawk ‘{ printf(“%d %lf %lf %lf 0.0 0.0 0.0 0.0 0.0 0.0 %lf %lf %lf 0.0 0.0 0.0 0.0 0.0 0.0 \n”,$1, $2, $3, $4, $2, $3, $4)}’

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s