Pendahuluan
awk
command adalah alat Linux dan bahasa pemrograman yang memungkinkan pengguna untuk memproses dan memanipulasi data dan menghasilkan laporan yang diformat. Alat ini mendukung berbagai operasi untuk pemrosesan teks tingkat lanjut dan memfasilitasi ekspresi pemilihan data yang kompleks.
Dalam tutorial ini, Anda akan mempelajari apa yang awk
perintah yang dilakukan dan cara menggunakannya.
Prasyarat
- Sistem yang menjalankan Linux.
- Akses ke jendela terminal.
Sintaks Perintah AWK
Sintaks untuk awk
perintahnya adalah:
awk [options] 'selection_criteria {action}' input-file > output-file
Opsi yang tersedia adalah:
Opsi | Deskripsi |
---|---|
-F [separator] | Digunakan untuk menentukan pemisah file. Pemisah default adalah ruang kosong. |
-f [filename] | Digunakan untuk menentukan file yang berisi awk naskah. Membaca awk sumber program dari file yang ditentukan, bukan argumen baris perintah pertama. |
-v | Digunakan untuk menetapkan variabel. |
Bagaimana Cara Kerja Perintah AWK?
awk
tujuan utama perintah adalah untuk membuat penemuan informasi dan manipulasi teks mudah dilakukan di Linux. Perintah ini bekerja dengan memindai satu set baris input secara berurutan dan mencari baris yang cocok dengan pola yang ditentukan oleh pengguna.
Untuk setiap pola, pengguna dapat menentukan tindakan yang akan dilakukan pada setiap baris yang cocok dengan pola yang ditentukan. Jadi, menggunakan awk
, pengguna dapat dengan mudah memproses file log yang kompleks dan menghasilkan laporan yang dapat dibaca.
Operasi AWK
awk
memungkinkan pengguna untuk melakukan berbagai operasi pada file input atau teks. Beberapa operasi yang tersedia adalah:
- Memindai file baris demi baris.
- Pisahkan baris/file input menjadi beberapa bidang.
- Bandingkan baris atau bidang input dengan pola yang ditentukan.
- Lakukan berbagai tindakan pada baris yang cocok.
- Format baris keluaran.
- Melakukan operasi aritmatika dan string.
- Gunakan aliran kontrol dan loop pada output.
- Ubah file dan data sesuai dengan struktur yang ditentukan.
- Buat laporan berformat.
Pernyataan Awk
Perintah tersebut menyediakan pernyataan aliran kontrol dasar (if-else
, while
, for
, break
) dan juga memungkinkan pengguna untuk mengelompokkan pernyataan menggunakan kurung kurawal {}
.
- jika-lain
if-else
pernyataan bekerja dengan mengevaluasi kondisi yang ditentukan dalam tanda kurung dan, jika kondisinya benar, pernyataan mengikuti if
pernyataan dijalankan. else
bagian adalah opsional.
Misalnya:
awk -F ',' '{if($2==$3){print $1","$2","$3} else {print "No Duplicates"}}' answers.txt
Output menunjukkan baris di mana duplikat ada dan menyatakan Tidak ada duplikat jika tidak ada jawaban duplikat di baris.
- sementara
while
pernyataan berulang kali mengeksekusi pernyataan target selama kondisi yang ditentukan benar. Itu berarti ia beroperasi seperti yang ada di bahasa pemrograman C. Jika kondisinya benar, badan perulangan akan dieksekusi. Jika kondisinya salah, awk
melanjutkan eksekusi.
Misalnya, pernyataan berikut menginstruksikan awk
untuk mencetak semua kolom input satu per baris:
awk '{i=0; while(i<=NF) { print i ":"$i; i++;}}' employees.txt
- untuk
for
pernyataan juga berfungsi seperti C, memungkinkan pengguna membuat loop yang perlu dieksekusi beberapa kali.
Misalnya:
awk 'BEGIN{for(i=1; i<=10; i++) print "The square of", i, "is", i*i;}'
Pernyataan di atas meningkatkan nilai i
per satu sampai mencapai sepuluh dan menghitung kuadrat dari i
setiap kali.
- istirahat
break
pernyataan segera keluar dari while
. terlampir atau for
. Untuk memulai iterasi berikutnya, gunakan continue
pernyataan.
next
pernyataan menginstruksikan awk
untuk melompat ke rekaman berikutnya dan mulai memindai pola dari atas. exit
pernyataan menginstruksikan awk
bahwa input telah berakhir.
Berikut adalah contoh break
pernyataan:
awk 'BEGIN{x=1; while(1) {print "Example"; if ( x==5 ) break; x++; }}'
Perintah di atas memutus loop setelah 5 iterasi.
Pola AWK
Menyisipkan pola di depan tindakan di awk
bertindak sebagai pemilih . Pemilih menentukan apakah akan melakukan suatu tindakan atau tidak. Ekspresi berikut dapat berfungsi sebagai pola:
- Ekspresi reguler.
- Ekspresi relasional aritmatika.
- Ekspresi bernilai string.
- Kombinasi Boolean arbitrer dari ekspresi di atas.
Bagian berikut menjelaskan ekspresi yang disebutkan di atas dan cara menggunakannya.
Pola Ekspresi Reguler
Pola ekspresi reguler adalah bentuk ekspresi paling sederhana yang berisi string karakter yang diapit garis miring. Bisa berupa urutan huruf, angka, atau kombinasi keduanya.
Dalam contoh berikut, program mengeluarkan semua baris yang dimulai dengan "A". Jika string yang ditentukan adalah bagian dari kata yang lebih besar, itu juga dicetak.
awk '$1 ~ /^A/ {print $0}' employees.txt
Pola Ekspresi Relasional
Jenis lain dari awk
pola adalah pola ekspresi relasional. Pola ekspresi relasional melibatkan penggunaan salah satu operator relasional berikut:<, <=, ==, !=,>= , dan > .
Berikut ini adalah contoh dari awk
ekspresi relasional:
awk 'BEGIN { a = 10; b = 10; if (a == b) print "a == b" }'
Pola Rentang
Pola rentang adalah pola yang terdiri dari dua pola dipisahkan dengan koma. Pola rentang melakukan tindakan yang ditentukan untuk setiap baris antara kemunculan pola satu dan pola dua.
Misalnya:
awk '/clerk/, /manager/ {print $1, $2}' employees.txt
Pola di atas menginstruksikan awk
untuk mencetak semua baris input yang mengandung kata kunci "petugas" dan "manajer".
Pola Ekspresi Khusus
Pola ekspresi khusus termasuk BEGIN
dan END
yang menunjukkan inisialisasi dan akhir program. BEGIN
pattern cocok dengan awal input, sebelum record pertama diproses. END
pattern cocok dengan akhir input, setelah record terakhir diproses.
Misalnya, Anda dapat menginstruksikan awk
untuk menampilkan pesan di awal dan di akhir proses:
awk 'BEGIN { print "List of debtors:" }; {print $1, $2}; END {print "End of the debtor list"}' debtors.txt
Menggabungkan Pola
awk
perintah memungkinkan pengguna untuk menggabungkan dua atau lebih pola menggunakan operator logika. Pola gabungan dapat berupa kombinasi pola Boolean apa pun. Operator logika untuk menggabungkan pola adalah:
||
(atau)&&
(dan)!
(tidak)
Misalnya:
awk '$3 > 10 && $4 < 20 {print $1, $2}' employees.txt
Output mencetak bidang pertama dan kedua dari catatan yang bidang ketiganya lebih besar dari sepuluh dan bidang keempat kurang dari 20.
Variabel AWK
awk
perintah memiliki variabel bidang bawaan, yang memecah file input menjadi bagian-bagian terpisah yang disebut bidang . awk
menetapkan variabel berikut untuk setiap bidang data:
$0
. Digunakan untuk menentukan seluruh baris.$1
. Menentukan bidang pertama.$2
. Menentukan bidang kedua.- dst.
awk
bawaan lain yang tersedia variabelnya adalah:
NR
. Menghitung jumlah record input (biasanya baris).awk
perintah melakukan pernyataan pola/tindakan sekali untuk setiap catatan dalam file.
Misalnya:
awk '{print NR,$0}' employees.txt
Perintah menampilkan nomor baris dalam output.
NF
. Menghitung jumlah kolom dalam catatan input saat ini dan menampilkan kolom terakhir dari file.
Misalnya:
awk '{print $NF}' employees.txt
FS
. Berisi karakter yang digunakan untuk membagi bidang pada baris input. Pemisah default adalah spasi, tetapi Anda dapat menggunakanFS
untuk menetapkan ulang pemisah ke karakter lain (biasanya diBEGIN
).
Misalnya, Anda dapat membuat etc/passwd file (daftar pengguna) lebih mudah dibaca dengan mengubah pemisah dari titik dua (:
) ke tanda hubung (/
) dan cetak juga pemisah bidang:
awk -FS 'BEGIN{FS=":"; OFS="-"} {print $0}' /etc/passwd
RS
. Menyimpan karakter pemisah rekaman saat ini. Baris input default adalah record input, yang menjadikan baris baru sebagai pemisah record default. Perintah ini berguna jika inputnya adalah file yang dipisahkan koma (CSV).
Misalnya:
awk 'BEGIN {FS="-"; RS=","; OFS=" owes Rs. "} {print $1,$2}' debtors.txt
OFS
. Menyimpan pemisah bidang keluaran, yang memisahkan bidang saat dicetak. Pemisah default adalah ruang kosong. Setiap kali file yang dicetak memiliki beberapa parameter yang dipisahkan dengan koma,OFS
nilai dicetak di antara setiap parameter.
Misalnya:
awk 'OFS=" works as " {print $1,$3}' employees.txt
Tindakan AWK
awk
alat mengikuti aturan yang berisi pasangan pola-tindakan. Tindakan terdiri dari pernyataan yang diapit kurung kurawal {}
yang berisi ekspresi, pernyataan kontrol, pernyataan majemuk, pernyataan input dan output, dan pernyataan penghapusan. Pernyataan tersebut dijelaskan pada bagian di atas.
Buat awk
skrip menggunakan sintaks berikut:
awk '{action}'
Misalnya:
awk '{print "How to use the awk command"}'
Perintah sederhana ini menginstruksikan awk
untuk mencetak string yang ditentukan setiap kali Anda menjalankan perintah. Hentikan program menggunakan Ctrl+D .
Cara Menggunakan Perintah AWK - Contoh
Selain memanipulasi data dan menghasilkan keluaran berformat, awk
memiliki kegunaan lain karena merupakan bahasa scripting dan tidak hanya perintah pemrosesan teks. Bagian ini menjelaskan kasus penggunaan alternatif untuk awk
.
- Perhitungan .
awk
perintah memungkinkan Anda untuk melakukan perhitungan aritmatika. Misalnya:
df | awk '/\/dev\/loop/ {print $1"\t"$2 + $3}'
Dalam contoh ini, kami menyalurkan ke perintah df dan menggunakan informasi yang dihasilkan dalam laporan untuk menghitung total memori yang tersedia dan digunakan oleh sistem file terpasang yang hanya berisi /dev dan /loop dalam nama.
Laporan yang dihasilkan menunjukkan jumlah memori /dev dan /loop filesystem di kolom dua dan tiga di df
keluaran.
- Pemfilteran .
awk
perintah memungkinkan Anda untuk memfilter output dengan membatasi panjang garis. Misalnya:
awk 'length($0) > 8' /etc/shells
Dalam contoh ini, kami menjalankan /etc/shells file sistem melalui awk
dan memfilter output agar hanya berisi baris yang berisi lebih dari 8 karakter.
- Pemantauan . Periksa apakah proses tertentu sedang berjalan di Linux dengan menyalurkan ke
ps
memerintah. Misalnya:
ps -ef | awk '{ if($NF == "clipboard") print $0}'
Output mencetak daftar semua proses yang berjalan pada mesin Anda dengan bidang terakhir yang cocok dengan pola yang ditentukan.
- Menghitung . Anda dapat menggunakan
awk
untuk menghitung jumlah karakter dalam satu baris dan mendapatkan nomor yang dicetak dalam hasilnya. Misalnya:
awk '{ print "The number of characters in line", NR,"=" length($0) }' employees.txt