GNU/Linux >> Belajar Linux >  >> Linux

7 Contoh Operator Awk yang Kuat (Unary, Binary, Arithmetic, String, Assignment, Conditional, Reg-Ex Awk Operators)

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.

  1. Operator Unary – Operator yang menerima operan tunggal disebut operator unary.
  2. 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.


Linux
  1. -eq:Operator Unary Diharapkan?

  2. Tutorial Pengenalan Awk – 7 Contoh Cetak Awk

  3. 4 Contoh Pernyataan Awk If ( if, if else, if else if, :? )

  1. Array AWK Dijelaskan dengan 5 Contoh Praktis

  2. 9 Fungsi Built-in Awk yang Kuat untuk Numerik

  3. 7 Contoh Operator Linux Grep OR, Grep AND, Grep NOT

  1. Contoh Perintah Objdump Linux (Membongkar File Biner)

  2. Contoh Perintah awk di Linux

  3. Skrip shell Linux:nomor hex ke string biner