Artikel ini adalah bagian dari seri Contoh Tutorial Awk yang sedang berlangsung. Dalam artikel awk kami sebelumnya, kami membahas tentang awk print, variabel yang ditentukan pengguna awk, dan variabel bawaan awk.
Seperti bahasa pemrograman lainnya, Awk juga memiliki banyak operator untuk operasi angka dan string. Dalam artikel ini mari kita bahas tentang semua kunci operator awk .
Ada dua jenis operator di Awk.
- Operator Unary – Operator yang menerima operan tunggal disebut operator unary.
- Operator Biner – Operator yang menerima lebih dari satu operan disebut operator biner.
Operator Awk Unary
Operator | Deskripsi |
+ | Positifkan angkanya |
– | Meniadakan angka |
++ | Peningkatan Otomatis |
— | Penurunan Otomatis |
Operator Biner Awk
Ada berbagai jenis operator biner yang tersedia di Awk. Itu diklasifikasikan berdasarkan penggunaannya.
Opertor Aritmatika Awk
Operator berikut digunakan untuk melakukan perhitungan aritmatika.
Operator | Deskripsi |
+ | Penambahan |
– | Pengurangan |
* | Perkalian |
/ | Divisi |
% | Divisi Modulo |
Operator String Awk
Untuk penggabungan string, Awk memiliki operator berikut.
Operator | Deskripsi |
(spasi) | Penggabungan String |
Operator Penugasan Awk
Awk memiliki operator Assignment dan operator Assignment Shortcut seperti yang tercantum di bawah ini.
Operator | Deskripsi |
= | Tugas |
+= | Penugasan penambahan pintasan |
-= | Tugas pengurangan pintasan |
*= | Penugasan perkalian jalan pintas |
/= | Penugasan pembagian jalan pintas |
%= | Penugasan pembagian modulo pintas |
Operator Bersyarat Awk
Awk memiliki daftar operator kondisional berikut yang dapat digunakan dengan struktur kontrol dan pernyataan perulangan yang akan dibahas dalam artikel mendatang.
Operator | Deskripsi |
> | Lebih besar dari |
>= | Lebih besar dari atau sama dengan |
Kurang dari | |
<= | Lebih kecil atau sama dengan |
<= | Lebih kecil atau sama dengan |
== | sama dengan |
!= | Tidak sama dengan |
&& | Kedua ekspresi kondisional harus benar |
|| | Salah satu dari ekspresi kondisional harus benar |
Operator Ekspresi Reguler Awk
Operator | Deskripsi |
~ | Operator pertandingan |
!~ | Tidak ada operator yang cocok |
Contoh Operator Awk
Sekarang mari kita tinjau beberapa contoh yang menggunakan operator awk. Mari kita gunakan /etc/passwd sebagai file input dalam contoh ini.
$ cat /etc/passwd gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh libuuid:x:100:101::/var/lib/libuuid:/bin/sh syslog:x:101:102::/home/syslog:/bin/false hplip:x:103:7:HPLIP system user,,,:/var/run/hplip:/bin/false saned:x:110:116::/home/saned:/bin/false pulse:x:111:117:PulseAudio daemon,,,:/var/run/pulse:/bin/false gdm:x:112:119:Gnome Display Manager:/var/lib/gdm:/bin/false
Contoh Awk 1:Hitung jumlah total bidang dalam file.
Skrip awk di bawah ini, cocok dengan semua baris dan terus menambahkan jumlah bidang di setiap baris, menggunakan operator penugasan penambahan pintasan. Jumlah bidang yang terlihat sejauh ini disimpan dalam variabel bernama 'total'. Setelah input diproses, pola khusus 'END {…}' dijalankan, yang mencetak jumlah total bidang.
$ awk -F ':' '{ total += NF }; END { print total }' /etc/passwd 49
Contoh Awk 2:Hitung jumlah pengguna yang menggunakan /bin/sh shell
Dalam skrip awk di bawah ini, ini cocok dengan bidang terakhir dari semua baris yang berisi pola /bin/sh. Ekspresi reguler harus ditutup antara //. Jadi semua frontslash(/) harus diloloskan dalam ekspresi reguler. Saat garis cocok dengan variabel 'n' bertambah satu. Mencetak nilai 'n' di bagian AKHIR.
$ awk -F ':' '$NF ~ /\/bin\/sh/ { n++ }; END { print n }' /etc/passwd 2
Contoh Awk 3:Temukan detail pengguna yang memiliki ID PENGGUNA tertinggi
Skrip awk di bawah ini, melacak angka terbesar di bidang dalam variabel 'maxuid' dan baris yang sesuai akan disimpan dalam variabel 'maxline'. Setelah melewati semua baris, ia akan mencetaknya.
$ awk -F ':' '$3 > maxuid { maxuid=$3; maxline=$0 }; END { print maxuid, maxline }' /etc/passwd 112 gdm:x:112:119:Gnome Display Manager:/var/lib/gdm:/bin/false
Contoh Awk 4:Cetak garis genap
Skrip awk di bawah ini, memproses setiap baris dan memeriksa NR % 2 ==0 yaitu jika NR adalah kelipatan 2. Ini melakukan operasi default yang mencetak seluruh baris.
$ awk 'NR % 2 == 0' /etc/passwd libuuid:x:100:101::/var/lib/libuuid:/bin/sh hplip:x:103:7:HPLIP system user,,,:/var/run/hplip:/bin/false pulse:x:111:117:PulseAudio daemon,,,:/var/run/pulse:/bin/false
Contoh Awk 5.Cetak setiap baris yang memiliki USER ID dan GROUP ID yang sama
Skrip awk di bawah ini hanya mencetak baris jika $3(USER ID) dan $4(GROUP ID) sama. Ia memeriksa kondisi ini untuk setiap baris input, jika cocok, akan mencetak seluruh baris.
$awk -F ':' '$3==$4' passwd.txt gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
Contoh Awk 6:Cetak detail pengguna yang memiliki ID PENGGUNA lebih dari atau sama dengan 100 dan yang harus menggunakan /bin/sh
Dalam pernyataan Awk di bawah ini, ada dua ekspresi kondisional satu adalah User id($3) lebih besar dari atau sama dengan 100, dan kedua adalah bidang terakhir harus cocok dengan /bin/sh , '&&' hanya akan dicetak jika keduanya di atas kondisi benar.
$ awk -F ':' '$3>=100 && $NF ~ /\/bin\/sh/' passwd.txt libuuid:x:100:101::/var/lib/libuuid:/bin/sh
Contoh Awk 7:Cetak detail pengguna yang tidak memiliki komentar di file /etc/passwd
Skrip Awk di bawah ini, membaca setiap baris dan memeriksa apakah bidang kelima kosong, jika kosong, ia akan mencetak baris tersebut.
$awk -F ':' '$5 == "" ' passwd.txt libuuid:x:100:101::/var/lib/libuuid:/bin/sh syslog:x:101:102::/home/syslog:/bin/false saned:x:110:116::/home/saned:/bin/false
Bacaan yang Disarankan
Sed dan Awk 101 Hacks, oleh Ramesh Natarajan . Saya menghabiskan beberapa jam sehari di lingkungan UNIX / Linux yang berurusan dengan file teks (data, konfigurasi, dan file log). Saya menggunakan Sed dan Awk untuk semua pekerjaan manipulasi teks saya. Berdasarkan pengalaman Sed dan Awk saya, saya telah menulis eBook Sed dan Awk 101 Hacks yang berisi 101 contoh praktis tentang berbagai fitur canggih Sed dan Awk yang akan meningkatkan kehidupan UNIX / Linux Anda. Bahkan jika Anda telah menggunakan Sed dan Awk selama beberapa tahun dan belum membaca buku ini, bantulah diri Anda sendiri dan baca buku ini. Anda akan kagum dengan kemampuan utilitas Sed dan Awk.