AWK adalah salah satu perintah paling kuat di Linux. Anda dapat mengelola data dan membuat laporan menggunakan perintah awk. Hal ini juga memungkinkan kita untuk menggunakan operasi logis, variabel, fungsi cetak dan banyak lagi. AWK adalah singkatan dari "Aho, Weinberger dan Kernighan" dan sebagian besar digunakan untuk pemindaian dan pemrosesan pola. Ini mencari satu atau lebih file untuk melihat apakah mereka berisi baris yang cocok dengan pola yang ditentukan dan kemudian melakukan tindakan terkait. Ia membaca dari file atau dari input dan output standarnya ke output standarnya. Untuk setiap baris, itu cocok dengan pola yang diberikan dalam urutan yang diberikan, jika cocok melakukan tindakan yang sesuai.
Fitur
• Menampilkan file teks sebagai record dan field
• Memiliki variabel, kondisional dan loop
• Memiliki operator aritmatika dan string
• Dapat menghasilkan laporan berformat
• Membaca dan mengedit teks dari string atau file
Dalam tutorial ini, kita akan melihat perintah AWK Linux dengan contoh dan melihat apa yang dapat dilakukannya.
Sintaks Basix dari AWK
Sintaks dasar perintah AWK ditunjukkan di bawah ini:
awk options program input-file
Penjelasan singkat dari setiap opsi ditunjukkan di bawah ini:
• -F fs :Digunakan untuk menentukan pemisah file.
• -f file :Digunakan untuk menentukan file yang berisi skrip awk.
• -v var=value :Digunakan untuk mendeklarasikan sebuah variabel.
Kami akan menggunakan file teks berikut sebagai file input untuk semua contoh dalam artikel ini:
cat > contents.txt
hitesh engineer sales 30000
jayesh director account 25000
vyom manager purchase 20000
bhavesh engineer sales 30000
rajesh directory sales 40000
niraj clerk account 20000
jay peon purchase 23000
deep clerk sales 20000
Sekarang, mari kita periksa isi file bernama 'contents.txt' dengan perintah AWK:
awk '{print}' contents.txt
Ini akan mencetak konten file seperti yang ditunjukkan di bawah ini:
hitesh engineer sales 30000
jayesh director account 25000
vyom manager purchase 20000
bhavesh engineer sales 30000
rajesh directory sales 40000
niraj clerk account 20000
jay peon purchase 23000
deep clerk sales 20000
Pada contoh di atas, tidak ada pola yang diberikan sehingga akan mencetak seluruh file.
Sekarang, cetak semua baris yang cocok dengan pola "penjualan":
awk '/sales/ {print}' contents.txt
Ini akan mencetak semua baris yang mengandung kata "penjualan" seperti yang ditunjukkan di bawah ini:
hitesh engineer sales 30000
bhavesh engineer sales 30000
rajesh directory sales 40000
deep clerk sales 20000
Variabel dalam AWK
AWK hadir dengan beberapa variabel bawaan yang digunakan untuk memecah sebaris teks menjadi kata atau bagian individual yang disebut bidang. Beberapa di antaranya ditunjukkan di bawah ini:
• $0 :Digunakan untuk seluruh baris.
• $1 :Digunakan untuk kolom pertama.
• $2 :Digunakan untuk kolom kedua.
• $n :Digunakan untuk bidang ke-n.
• NR :Digunakan untuk menentukan jumlah total record saat ini.
• NF :Digunakan untuk menentukan jumlah total field dalam record.
• FS :Ini berisi karakter pemisah bidang dan digunakan untuk membagi bidang pada baris input.
• RS :Ini menyimpan karakter pemisah record saat ini.
• OFS :Ini menyimpan pemisah bidang keluaran dan digunakan untuk memisahkan bidang saat Awk mencetaknya.
• ORS :Ini menyimpan pemisah catatan keluaran dan digunakan untuk memisahkan jalur keluaran ketika Awk mencetaknya.
Sekarang, cetak kolom no 1 dan 3 dari file isi.txt menggunakan sintaks berikut:
awk '{print $1,$3}' contents.txt
Anda seharusnya hanya melihat bidang pertama dan ketiga dari file isi.txt:
hitesh sales
jayesh account
vyom purchase
bhavesh sales
rajesh sales
niraj account
jay purchase
deep sales
Anda dapat menggunakan NR dengan perintah AWK untuk mencetak semua baris beserta nomor baris:
awk '{print NR,$0}' contents.txt
Keluaran:
1 hitesh engineer sales 30000
2 jayesh director account 25000
3 vyom manager purchase 20000
4 bhavesh engineer sales 30000
5 rajesh directory sales 40000
6 niraj clerk account 20000
7 jay peon purchase 23000
8 deep clerk sales 20000
Anda dapat menggunakan NF untuk menampilkan bidang terakhir dan $1 untuk menampilkan bidang pertama:
awk '{print $1,$NF}' contents.txt
Ini akan mencetak bidang pertama dan terakhir dari file isi.txt:
hitesh 30000
jayesh 25000
vyom 20000
bhavesh 30000
rajesh 40000
niraj 20000
jay 23000
deep 20000
Untuk mencetak nomor baris dari 2 hingga 5 gunakan variabel NR seperti yang ditunjukkan di bawah ini:
awk 'NR==2, NR==5 {print NR,$0}' contents.txt
Keluaran:
2 jayesh director account 25000
3 vyom manager purchase 20000
4 bhavesh engineer sales 30000
5 rajesh directory sales 40000
Untuk menghitung jumlah baris dalam file isi.txt menggunakan NR:
awk 'END { print NR } ' contents.txt
Anda akan melihat output berikut:
8
Blok MULAI dan AKHIR
Ada juga blok BEGIN dan END opsional yang dapat berisi perintah untuk dieksekusi sebelum dan sesudah pemrosesan file. Blok BEGIN digunakan untuk melakukan tindakan sebelum rekaman diproses sedangkan blok END digunakan untuk melakukan tindakan setelah rekaman diproses.
Sintaks dasar untuk menggunakan blok BEGIN dan END dengan perintah AWK ditunjukkan di bawah ini:
awk 'BEGIN { action; } /search/ { action; } END { action; }' input_file
Anda dapat mencetak informasi tentang bidang yang Anda cetak dengan blok BEGIN dan END.
Contoh berikut akan mencetak pesan sebelum dan sesudah memproses kolom kedua dari setiap record dalam file isi.txt:
awk 'BEGIN { print "Start Process." }; { print $2 }; END { print "End Process." }' contents.txt
Keluaran:
Start Process.
engineer
director
manager
engineer
directory
clerk
peon
clerk
End Process.
Anda juga dapat menggunakan blok BEGIN dan END untuk mengubah data dari file dan mengonversinya menjadi tabel. Contoh berikut akan mengonversi file /etc/passwd menjadi tabel:
awk 'BEGIN { FS=":"; print "User\t\tUID\t\tGID\t\tHome\t\tShell\n--------------"; } {print $1,"\t\t",$3,"\t\t",$4,"\t\t",$6,"\t\t",$7;} END { print "---------\nFile Complete" }' /etc/passwd
Keluaran:
User UID GID Home Shell
--------------
root 0 0 /root /bin/bash
daemon 1 1 /usr/sbin /usr/sbin/nologin
bin 2 2 /bin /usr/sbin/nologin
sys 3 3 /dev /usr/sbin/nologin
sync 4 65534 /bin /bin/sync
games 5 60 /usr/games /usr/sbin/nologin
man 6 12 /var/cache/man /usr/sbin/nologin
lp 7 7 /var/spool/lpd /usr/sbin/nologin
mail 8 8 /var/mail /usr/sbin/nologin
news 9 9 /var/spool/news /usr/sbin/nologin
uucp 10 10 /var/spool/uucp /usr/sbin/nologin
proxy 13 13 /bin /usr/sbin/nologin
www-data 33 33 /var/www /usr/sbin/nologin
---------
File Complete
Penelusuran Bersyarat
Perintah AWK juga mendukung beberapa pernyataan bersyarat termasuk, if, while loop, for loop dan banyak lagi. Ini akan membantu Anda mengambil baris yang cocok dengan kondisi tertentu.
Contoh berikut akan menggunakan kondisi "jika" untuk mencetak semua baris yang berisi "penjualan" di bidang ketiga:
awk '{ if ($3 ~ /sales/) print}' contents.txt
Keluaran:
hitesh engineer sales 30000
bhavesh engineer sales 30000
rajesh directory sales 40000
deep clerk sales 20000
Contoh berikut akan menggunakan loop "untuk" untuk mencetak tiga bidang pertama dari setiap catatan, satu per baris.
awk '{ for (i = 1; i <= 3; i++) print $i }' contents.txt
Keluaran:
hitesh
engineer
sales
jayesh
director
account
vyom
manager
purchase
bhavesh
engineer
sales
rajesh
directory
sales
niraj
clerk
account
jay
peon
purchase
deep
clerk
sales
Contoh berikut akan menggunakan loop "sementara" untuk mencetak dua bidang pertama dari setiap catatan, satu per baris.
awk '{ i = 1; while ( i <= 2 ) { print $i i++ } }' contents.txt
Keluaran:
hitesh1
engineer2
jayesh1
director2
vyom1
manager2
bhavesh1
engineer2
rajesh1
directory2
niraj1
clerk2
jay1
peon2
deep1
clerk2
Memproses Output dari Perintah Lain
Anda juga dapat menggunakan perintah AWK untuk mengurai output dari perintah lain alih-alih menentukan nama file. Perintah "ip a" mencetak informasi tentang IP sistem, alamat Mac, dan informasi terkait jaringan lainnya seperti yang ditunjukkan di bawah ini:
ip a s wlan0
Keluaran:
2: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 4c:bb:58:9c:f5:55 brd ff:ff:ff:ff:ff:ff
inet 172.20.10.3/28 brd 172.20.10.15 scope global wlan0
valid_lft forever preferred_lft forever
inet6 2401:4900:1d71:ef26:8846:95b2:4ca8:aa7d/64 scope global temporary dynamic
valid_lft 600574sec preferred_lft 81574sec
inet6 2401:4900:1d71:ef26:4ebb:58ff:fe9c:f555/64 scope global dynamic
valid_lft forever preferred_lft forever
inet6 fe80::4ebb:58ff:fe9c:f555/64 scope link
valid_lft forever preferred_lft forever
Sekarang, Anda dapat menggunakan perintah AWK untuk mencetak hanya alamat IP sistem seperti yang ditunjukkan di bawah ini:
ip a s wlan0 | awk -F '[\/ ]+' '/inet / {print $3}
Anda akan melihat output berikut:
172.20.10.3
Contoh Lanjutan Perintah AWK
Contoh 1: Perintah AWK memungkinkan Anda untuk mencetak baris dengan jumlah karakter tertentu. Misalnya, mencetak baris dengan lebih dari 27 karakter, gunakan perintah di bawah ini:
awk 'length($0) > 27' contents.txt
Keluaran:
jayesh director account 25000
bhavesh engineer sales 30000
rajesh directory sales 40000
Contoh 2: Periksa pangkat tiga dari angka yang diberikan
Untuk mencetak pangkat tiga dari angka yang diberikan hingga 5, jalankan perintah berikut:
awk 'BEGIN { for(i=1; i<=5; i++) print "Cube of",i,"is",i*i*i; }'
Keluaran:
Cube of 1 is 1
Cube of 2 is 8
Cube of 3 is 27
Cube of 4 is 64
Cube of 5 is 125
Contoh 3: Hitung jumlah baris dalam file yang ditentukan
Anda dapat memeriksa jumlah baris dalam file yang ditentukan dan mencetaknya menggunakan perintah berikut:
awk 'END { print NR }' contents.txt
Keluaran:
8
Contoh 4: Temukan baris terpanjang dalam file yang diberikan dan cetak karakternya
Anda dapat menemukan baris terpanjang dalam file yang diberikan dan mencetak karakter dari baris tersebut menggunakan perintah berikut:
awk '{ if (length($0) > max) max = length($0) } END { print max }' contents.txt
Keluaran
29
Contoh 5: Urutkan kolom pertama dari file yang diberikan
Untuk mengurutkan dan mencetak kolom pertama dari file isi.txt, jalankan perintah berikut:
awk -F: '{ print $1 }' contents.txt | sort
Keluaran:
bhavesh engineer sales 30000
deep clerk sales 20000
hitesh engineer sales 30000
jayesh director account 25000
jay peon purchase 23000
niraj clerk account 20000
rajesh directory sales 40000
vyom manager purchase 20000
Contoh 6: Cetak garis genap
Untuk mencetak hanya baris bernomor genap di file isi.txt, jalankan perintah berikut:
awk 'NR % 2 == 0' contents.txt
Keluaran:
jayesh director account 25000
bhavesh engineer sales 30000
niraj clerk account 20000
deep clerk sales 20000
Contoh 7: Ubah pemisah bidang
Anda dapat mengubah pemisah yang diajukan dari spasi ke | dan cetak dengan perintah berikut:
awk 'BEGIN{OFS="|"}{print $1,$2,$3,$4}' contents.txt
Keluaran:
hitesh|engineer|sales|30000
jayesh|director|account|25000
vyom|manager|purchase|20000
bhavesh|engineer|sales|30000
rajesh|directory|sales|40000
niraj|clerk|account|20000
jay|peon|purchase|23000
deep|clerk|sales|20000
Kesimpulan
Dalam tutorial ini, Anda mempelajari cara menggunakan perintah AWK untuk mencocokkan pola yang ditentukan dan kemudian melakukan tindakan terkait. Saya harap Anda memiliki gagasan yang jelas tentang cara menggunakan perintah AWK untuk memanipulasi, memformat, dan secara selektif mencetak file teks.