AWK - Panduan Cepat
AWK adalah bahasa pemrograman yang ditafsirkan. Ini sangat kuat dan dirancang khusus untuk pemrosesan teks. Namanya berasal dari nama keluarga penulisnya -Alfred Aho, Peter Weinberger, and Brian Kernighan.
Versi AWK yang didistribusikan GNU / Linux ditulis dan dikelola oleh Free Software Foundation (FSF); itu sering disebut sebagaiGNU AWK.
Jenis AWK
Berikut adalah varian AWK -
AWK - AWK Asli dari Laboratorium AT&T.
NAWK - Versi AWK yang lebih baru dan lebih baik dari AT&T Laboratory.
GAWK- Ini adalah GNU AWK. Semua distribusi GNU / Linux mengirimkan GAWK. Ini sepenuhnya kompatibel dengan AWK dan NAWK.
Penggunaan Umum AWK
Banyak sekali tugas yang bisa dilakukan dengan AWK. Di bawah ini hanya beberapa dari mereka -
- Pemrosesan teks,
- Memproduksi laporan teks berformat,
- Melakukan operasi aritmatika,
- Melakukan operasi string, dan banyak lagi.
Bab ini menjelaskan cara mengatur lingkungan AWK pada sistem GNU / Linux Anda.
Instalasi Menggunakan Package Manager
Umumnya, AWK tersedia secara default di sebagian besar distribusi GNU / Linux. Kamu dapat memakaiwhichperintah untuk memeriksa apakah itu ada di sistem Anda atau tidak. Jika Anda tidak memiliki AWK, instal di GNU / Linux berbasis Debian menggunakan Alat Paket Lanjutan(APT) manajer paket sebagai berikut -
[jeryy]$ sudo apt-get update [jeryy]$ sudo apt-get install gawk
Demikian pula, untuk menginstal AWK pada GNU / Linux berbasis RPM, gunakan Pengubah Pembaruan Yellowdog yum manajer paket sebagai berikut -
[root]# yum install gawk
Setelah instalasi, pastikan AWK dapat diakses melalui baris perintah.
[jerry]$ which awk
Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut -
/usr/bin/awk
Instalasi dari Source Code
Karena GNU AWK adalah bagian dari proyek GNU, kode sumbernya tersedia untuk diunduh gratis. Kami telah melihat cara menginstal AWK menggunakan manajer paket. Mari kita sekarang memahami cara menginstal AWK dari kode sumbernya.
Instalasi berikut berlaku untuk semua perangkat lunak GNU / Linux, dan untuk sebagian besar program lain yang tersedia secara bebas. Berikut langkah-langkah instalasi -
Step 1- Unduh kode sumber dari tempat asli. Utilitas baris perintahwget melayani tujuan ini.
[jerry]$ wget http://ftp.gnu.org/gnu/gawk/gawk-4.1.1.tar.xz
Step 2 - Dekompresi dan ekstrak kode sumber yang diunduh.
[jerry]$ tar xvf gawk-4.1.1.tar.xz
Step 3 - Pindah ke direktori dan jalankan konfigurasi.
[jerry]$ ./configure
Step 4 - Setelah berhasil diselesaikan, file configuremenghasilkan Makefile. Untuk mengompilasi kode sumber, terbitkan amake perintah.
[jerry]$ make
Step 5- Anda dapat menjalankan rangkaian pengujian untuk memastikan build sudah bersih. Ini merupakan langkah opsional.
[jerry]$ make check
Step 6- Terakhir, instal AWK. Pastikan Anda memiliki hak istimewa pengguna super.
[jerry]$ sudo make install
Hanya itu saja! Anda telah berhasil menyusun dan menginstal AWK. Verifikasi dengan menjalankanawk perintah sebagai berikut -
[jerry]$ which awk
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
/usr/bin/awk
Untuk menjadi programmer AWK yang ahli, Anda perlu mengetahui bagian dalamnya. AWK mengikuti alur kerja sederhana - Baca, Jalankan, dan Ulangi. Diagram berikut menggambarkan alur kerja AWK -
Baca
AWK membaca baris dari aliran input (file, pipa, atau stdin) dan menyimpannya dalam memori.
Menjalankan
Semua perintah AWK diterapkan secara berurutan pada input. Secara default AWK menjalankan perintah di setiap baris. Kami dapat membatasi ini dengan memberikan pola.
Ulang
Proses ini berulang hingga file mencapai akhirnya.
Struktur Program
Mari kita sekarang memahami struktur program AWK.
BEGIN blokir
Sintaks dari blok BEGIN adalah sebagai berikut -
Syntax
BEGIN {awk-commands}
Blok BEGIN dijalankan saat program dimulai. Ini dijalankan hanya sekali. Ini adalah tempat yang bagus untuk menginisialisasi variabel. BEGIN adalah kata kunci AWK dan karenanya harus dalam huruf besar. Harap dicatat bahwa blok ini opsional.
Blok Tubuh
Sintaks dari body block adalah sebagai berikut -
Syntax
/pattern/ {awk-commands}
Blok tubuh menerapkan perintah AWK pada setiap baris masukan. Secara default, AWK menjalankan perintah di setiap baris. Kami dapat membatasi ini dengan memberikan pola. Perhatikan bahwa tidak ada kata kunci untuk blok Body.
AKHIR Blok
Sintaks dari blok END adalah sebagai berikut -
Syntax
END {awk-commands}
Blok END dijalankan di akhir program. END adalah kata kunci AWK dan karenanya harus dalam huruf besar. Harap dicatat bahwa blok ini opsional.
Mari kita buat file marks.txt yang berisi nomor seri, nama siswa, nama mata pelajaran, dan nomor nilai yang diperoleh.
1) Amit Physics 80
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
Sekarang mari kita tampilkan isi file dengan header dengan menggunakan script AWK.
Example
[jerry]$ awk 'BEGIN{printf "Sr No\tName\tSub\tMarks\n"} {print}' marks.txt
Ketika kode ini dijalankan, itu menghasilkan hasil sebagai berikut -
Output
Sr No Name Sub Marks
1) Amit Physics 80
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
Pada awalnya, AWK mencetak header dari blok BEGIN. Kemudian di blok tubuh, ia membaca baris dari file dan menjalankan perintah cetak AWK yang hanya mencetak konten pada aliran keluaran standar. Proses ini berulang hingga file mencapai akhir.
AWK mudah digunakan. Perintah AWK dapat kita berikan baik secara langsung dari command line maupun dalam bentuk file teks yang berisi perintah AWK.
Baris Perintah AWK
Kita dapat menentukan perintah AWK dalam tanda kutip tunggal pada baris perintah seperti yang ditunjukkan -
awk [options] file ...
Contoh
Pertimbangkan file teks marks.txt dengan konten berikut -
1) Amit Physics 80
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
Mari kita tampilkan isi file secara lengkap menggunakan AWK sebagai berikut -
Example
[jerry]$ awk '{print}' marks.txt
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Output
1) Amit Physics 80
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
File Program AWK
Kami dapat memberikan perintah AWK dalam file skrip seperti yang ditunjukkan -
awk [options] -f file ....
Pertama, buat file teks command.awk berisi perintah AWK seperti yang ditunjukkan di bawah ini -
{print}
Sekarang kita dapat menginstruksikan AWK untuk membaca perintah dari file teks dan melakukan tindakan. Di sini, kami mencapai hasil yang sama seperti yang ditunjukkan pada contoh di atas.
Example
[jerry]$ awk -f command.awk marks.txt
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Output
1) Amit Physics 80
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
Opsi Standar AWK
AWK mendukung opsi standar berikut yang dapat disediakan dari baris perintah.
Opsi -v
Opsi ini memberikan nilai ke variabel. Ini memungkinkan penugasan sebelum eksekusi program. Contoh berikut menjelaskan penggunaan opsi -v.
Example
[jerry]$ awk -v name=Jerry 'BEGIN{printf "Name = %s\n", name}'
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Output
Name = Jerry
Opsi --dump-variabel [= file]
Ini mencetak daftar variabel global yang diurutkan dan nilai akhirnya ke file. File defaultnya adalahawkvars.out.
Example
[jerry]$ awk --dump-variables '' [jerry]$ cat awkvars.out
Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut -
Output
ARGC: 1
ARGIND: 0
ARGV: array, 1 elements
BINMODE: 0
CONVFMT: "%.6g"
ERRNO: ""
FIELDWIDTHS: ""
FILENAME: ""
FNR: 0
FPAT: "[^[:space:]]+"
FS: " "
IGNORECASE: 0
LINT: 0
NF: 0
NR: 0
OFMT: "%.6g"
OFS: " "
ORS: "\n"
RLENGTH: 0
RS: "\n"
RSTART: 0
RT: ""
SUBSEP: "\034"
TEXTDOMAIN: "messages"
Opsi --help
Opsi ini mencetak pesan bantuan pada keluaran standar.
Example
[jerry]$ awk --help
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Output
Usage: awk [POSIX or GNU style options] -f progfile [--] file ...
Usage: awk [POSIX or GNU style options] [--] 'program' file ...
POSIX options : GNU long options: (standard)
-f progfile --file=progfile
-F fs --field-separator=fs
-v var=val --assign=var=val
Short options : GNU long options: (extensions)
-b --characters-as-bytes
-c --traditional
-C --copyright
-d[file] --dump-variables[=file]
-e 'program-text' --source='program-text'
-E file --exec=file
-g --gen-pot
-h --help
-L [fatal] --lint[=fatal]
-n --non-decimal-data
-N --use-lc-numeric
-O --optimize
-p[file] --profile[=file]
-P --posix
-r --re-interval
-S --sandbox
-t --lint-old
-V --version
Opsi --lint [= fatal]
Opsi ini memungkinkan pemeriksaan konstruksi non-portabel atau meragukan. Saat bertengkarfataldisediakan, ini memperlakukan pesan peringatan sebagai kesalahan. Contoh berikut menunjukkan ini -
Example
[jerry]$ awk --lint '' /bin/ls
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Output
awk: cmd. line:1: warning: empty program text on command line
awk: cmd. line:1: warning: source file does not end in newline
awk: warning: no program text at all!
Opsi --posix
Opsi ini mengaktifkan kompatibilitas POSIX yang ketat, di mana semua ekstensi umum dan khusus gawk dinonaktifkan.
Opsi --profile [= file]
Opsi ini menghasilkan versi program yang cukup dicetak dalam file. File defaultnya adalahawkprof.out. Contoh sederhana di bawah ini menggambarkan hal ini -
Example
[jerry]$ awk --profile 'BEGIN{printf"---|Header|--\n"} {print} END{printf"---|Footer|---\n"}' marks.txt > /dev/null [jerry]$ cat awkprof.out
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Output
# gawk profile, created Sun Oct 26 19:50:48 2014
# BEGIN block(s)
BEGIN {
printf "---|Header|--\n"
}
# Rule(s) {
print $0
}
# END block(s)
END {
printf "---|Footer|---\n"
}
Opsi --traditional
Opsi ini menonaktifkan semua ekstensi khusus gawk.
Opsi --version
Opsi ini menampilkan informasi versi program AWK.
Example
[jerry]$ awk --version
Ketika kode ini dijalankan, itu menghasilkan hasil sebagai berikut -
Output
GNU Awk 4.0.1
Copyright (C) 1989, 1991-2012 Free Software Foundation.
Bab ini menjelaskan beberapa perintah AWK yang berguna dan contoh yang sesuai. Pertimbangkan file teksmarks.txt untuk diproses dengan konten berikut -
1) Amit Physics 80
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
Mencetak Kolom atau Bidang
Anda dapat menginstruksikan AWK untuk hanya mencetak kolom tertentu dari kolom input. Contoh berikut menunjukkan ini -
Contoh
[jerry]$ awk '{print $3 "\t" $4}' marks.txt
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Keluaran
Physics 80
Maths 90
Biology 87
English 85
History 89
Di dalam file marks.txt, kolom ketiga berisi nama subjek dan kolom keempat berisi nilai yang diperoleh dari subjek tertentu. Mari kita cetak dua kolom ini menggunakan perintah cetak AWK. Dalam contoh di atas,$3 and $4 mewakili bidang ketiga dan keempat masing-masing dari catatan masukan.
Mencetak Semua Garis
Secara default, AWK mencetak semua garis yang cocok dengan pola.
Contoh
[jerry]$ awk '/a/ {print $0}' marks.txt
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Keluaran
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
Dalam contoh di atas, kami mencari pola formulir a. Ketika kecocokan pola berhasil, itu mengeksekusi perintah dari blok tubuh. Jika tidak ada body block - tindakan default diambil yaitu mencetak record. Oleh karena itu, perintah berikut menghasilkan hasil yang sama -
Contoh
[jerry]$ awk '/a/' marks.txt
Mencetak Kolom dengan Pola
Saat pencocokan pola berhasil, AWK mencetak seluruh record secara default. Namun Anda dapat menginstruksikan AWK untuk hanya mencetak bidang tertentu. Misalnya, contoh berikut mencetak bidang ketiga dan keempat ketika pencocokan pola berhasil.
Contoh
[jerry]$ awk '/a/ {print $3 "\t" $4}' marks.txt
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Keluaran
Maths 90
Biology 87
English 85
History 89
Mencetak Kolom dalam Urutan Apa Pun
Anda dapat mencetak kolom dalam urutan apa pun. Misalnya, contoh berikut mencetak kolom keempat diikuti kolom ketiga.
Contoh
[jerry]$ awk '/a/ {print $4 "\t" $3}' marks.txt
Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut -
Keluaran
90 Maths
87 Biology
85 English
89 History
Menghitung dan Mencetak Pola yang Sesuai
Mari kita lihat contoh di mana Anda dapat menghitung dan mencetak jumlah baris yang berhasil mencocokkan pola.
Contoh
[jerry]$ awk '/a/{++cnt} END {print "Count = ", cnt}' marks.txt
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Keluaran
Count = 4
Dalam contoh ini, kami menambah nilai penghitung ketika pencocokan pola berhasil dan kami mencetak nilai ini di blok END. Perhatikan bahwa tidak seperti bahasa pemrograman lain, variabel tidak perlu dideklarasikan sebelum digunakan.
Mencetak Garis dengan Lebih dari 18 Karakter
Mari kita cetak hanya baris yang mengandung lebih dari 18 karakter.
Contoh
[jerry]$ awk 'length($0) > 18' marks.txt
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Keluaran
3) Shyam Biology 87
4) Kedar English 85
AWK menyediakan built-in length fungsi yang mengembalikan panjang string. $0variabel menyimpan seluruh baris dan jika tidak ada blok isi, tindakan default diambil, yaitu tindakan cetak. Oleh karena itu, jika sebuah garis memiliki lebih dari 18 karakter, maka hasil perbandingannya benar dan garis tersebut dicetak.
AWK menyediakan beberapa variabel built-in. Mereka memainkan peran penting saat menulis skrip AWK. Bab ini menunjukkan penggunaan variabel built-in.
Variabel AWK standar
Variabel AWK standar dibahas di bawah ini.
ARGC
Ini menyiratkan jumlah argumen yang disediakan di baris perintah.
Example
[jerry]$ awk 'BEGIN {print "Arguments =", ARGC}' One Two Three Four
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Output
Arguments = 5
Tetapi mengapa AWK menampilkan 5 ketika Anda hanya menyampaikan 4 argumen? Cukup periksa contoh berikut untuk menghilangkan keraguan Anda.
ARGV
Ini adalah larik yang menyimpan argumen baris perintah. Rentang indeks valid dari array dari 0 hingga ARGC-1.
Example
[jerry]$ awk 'BEGIN {
for (i = 0; i < ARGC - 1; ++i) {
printf "ARGV[%d] = %s\n", i, ARGV[i]
}
}' one two three four
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Output
ARGV[0] = awk
ARGV[1] = one
ARGV[2] = two
ARGV[3] = three
CONVFMT
Ini mewakili format konversi untuk angka. Nilai defaultnya adalah%.6g.
Example
[jerry]$ awk 'BEGIN { print "Conversion Format =", CONVFMT }'
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Output
Conversion Format = %.6g
MENGEPUNG
Ini adalah array asosiatif dari variabel lingkungan.
Example
[jerry]$ awk 'BEGIN { print ENVIRON["USER"] }'
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Output
jerry
Untuk menemukan nama variabel lingkungan lainnya, gunakan env perintah.
NAMA FILE
Ini mewakili nama file saat ini.
Example
[jerry]$ awk 'END {print FILENAME}' marks.txt
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Output
marks.txt
Harap perhatikan bahwa FILENAME tidak ditentukan di blok BEGIN.
FS
Ini mewakili pemisah bidang (input) dan nilai defaultnya adalah spasi. Anda juga dapat mengubahnya dengan menggunakan-F opsi baris perintah.
Example
[jerry]$ awk 'BEGIN {print "FS = " FS}' | cat -vte
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Output
FS = $
NF
Ini mewakili jumlah bidang dalam rekor saat ini. Misalnya, contoh berikut hanya mencetak baris yang berisi lebih dari dua bidang.
Example
[jerry]$ echo -e "One Two\nOne Two Three\nOne Two Three Four" | awk 'NF > 2'
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Output
One Two Three
One Two Three Four
NR
Ini mewakili jumlah rekor saat ini. Misalnya, contoh berikut mencetak record jika nomor record saat ini kurang dari tiga.
Example
[jerry]$ echo -e "One Two\nOne Two Three\nOne Two Three Four" | awk 'NR < 3'
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Output
One Two
One Two Three
FNR
Ini mirip dengan NR, tetapi relatif terhadap file saat ini. Ini berguna saat AWK beroperasi pada banyak file. Nilai FNR diatur ulang dengan file baru.
SERING
Ini mewakili nomor format keluaran dan nilai defaultnya adalah %.6g.
Example
[jerry]$ awk 'BEGIN {print "OFMT = " OFMT}'
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Output
OFMT = %.6g
OFS
Ini mewakili pemisah bidang keluaran dan nilai defaultnya adalah spasi.
Example
[jerry]$ awk 'BEGIN {print "OFS = " OFS}' | cat -vte
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Output
OFS = $
ORS
Ini mewakili pemisah rekaman keluaran dan nilai defaultnya adalah baris baru.
Example
[jerry]$ awk 'BEGIN {print "ORS = " ORS}' | cat -vte
Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut -
Output
ORS = $
$
PANJANG
Ini mewakili panjang string yang cocok dengan matchfungsi. Fungsi pencocokan AWK mencari string tertentu dalam string input.
Example
[jerry]$ awk 'BEGIN { if (match("One Two Three", "re")) { print RLENGTH } }'
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Output
2
RS
Ini mewakili pemisah catatan (input) dan nilai defaultnya adalah baris baru.
Example
[jerry]$ awk 'BEGIN {print "RS = " RS}' | cat -vte
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Output
RS = $
$
MULAI
Ini mewakili posisi pertama dalam string yang cocok dengan match fungsi.
Example
[jerry]$ awk 'BEGIN { if (match("One Two Three", "Thre")) { print RSTART } }'
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Output
9
LANGGANAN
Ini mewakili karakter pemisah untuk langganan array dan nilai defaultnya adalah \034.
Example
[jerry]$ awk 'BEGIN { print "SUBSEP = " SUBSEP }' | cat -vte
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Output
SUBSEP = ^\$
$ 0
Ini mewakili seluruh catatan masukan.
Example
[jerry]$ awk '{print $0}' marks.txt
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Output
1) Amit Physics 80
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
$ n
Ini mewakili bidang ke- n dalam catatan saat ini di mana bidang dipisahkan oleh FS.
Example
[jerry]$ awk '{print $3 "\t" $4}' marks.txt
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Output
Physics 80
Maths 90
Biology 87
English 85
History 89
Variabel Khusus GNU AWK
Variabel khusus GNU AWK adalah sebagai berikut -
ARGIND
Ini mewakili indeks dalam ARGV dari file saat ini yang sedang diproses.
Example
[jerry]$ awk '{
print "ARGIND = ", ARGIND; print "Filename = ", ARGV[ARGIND]
}' junk1 junk2 junk3
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Output
ARGIND = 1
Filename = junk1
ARGIND = 2
Filename = junk2
ARGIND = 3
Filename = junk3
BINMODE
Ini digunakan untuk menentukan mode biner untuk semua file I / O pada sistem non-POSIX. Nilai numerik 1, 2, atau 3 menentukan bahwa file input, file output, atau semua file, masing-masing, harus menggunakan I / O biner. Nilai string darir atau wtentukan bahwa file input atau file output, masing-masing, harus menggunakan I / O biner. Nilai string darirw atau wr tentukan bahwa semua file harus menggunakan I / O biner.
ERRNO
Sebuah string menunjukkan kesalahan saat pengalihan gagal getline atau jika close panggilan gagal.
Example
[jerry]$ awk 'BEGIN { ret = getline < "junk.txt"; if (ret == -1) print "Error:", ERRNO }'
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Output
Error: No such file or directory
FIELDWIDTHS
Daftar variabel lebar bidang yang dipisahkan spasi ditetapkan, GAWK mem-parsing masukan menjadi bidang dengan lebar tetap, alih-alih menggunakan nilai variabel FS sebagai pemisah bidang.
MENGABAIKAN
Jika variabel ini disetel, GAWK menjadi case-insensitive. Contoh berikut menunjukkan ini -
Example
[jerry]$ awk 'BEGIN{IGNORECASE = 1} /amit/' marks.txt
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Output
1) Amit Physics 80
LINT
Ini memberikan kontrol dinamis dari file --lintopsi dari program GAWK. Jika variabel ini disetel, GAWK mencetak peringatan lint. Saat menetapkan nilai string fatal, peringatan lint menjadi error fatal, persis seperti itu--lint=fatal.
Example
[jerry]$ awk 'BEGIN {LINT = 1; a}'
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Output
awk: cmd. line:1: warning: reference to uninitialized variable `a'
awk: cmd. line:1: warning: statement has no effect
PROCINFO
Ini adalah array asosiatif yang berisi informasi tentang proses, seperti nomor UID nyata dan efektif, nomor ID proses, dan sebagainya.
Example
[jerry]$ awk 'BEGIN { print PROCINFO["pid"] }'
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Output
4316
TEXTDOMAIN
Ini mewakili domain teks dari program AWK. Ini digunakan untuk menemukan terjemahan lokal untuk string program.
Example
[jerry]$ awk 'BEGIN { print TEXTDOMAIN }'
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Output
messages
Output di atas menunjukkan teks bahasa Inggris karena en_IN lokal
Seperti bahasa pemrograman lainnya, AWK juga menyediakan banyak operator. Bab ini menjelaskan operator AWK dengan contoh yang sesuai.
S.No. | Operator & Deskripsi |
---|---|
1 | Operator Aritmatika AWK mendukung operator aritmatika berikut. |
2 | Operator Increment dan Decrement AWK mendukung operator increment dan decrement berikut. |
3 | Operator Penugasan AWK mendukung operator penugasan berikut. |
4 | Operator Relasional AWK mendukung operator relasional berikut. |
5 | Operator Logis AWK mendukung operator logika berikut. |
6 | Operator Ternary Kita dapat dengan mudah mengimplementasikan ekspresi kondisi menggunakan operator terner. |
7 | Operator Unary AWK mendukung operator unary berikut. |
8 | Operator Eksponensial Ada dua format operator eksponensial. |
9 | Operator Penggabungan String Spasi adalah operator penggabungan string yang menggabungkan dua string. |
10 | Array Keanggotaan Operator Itu diwakili oleh in. Ini digunakan saat mengakses elemen array. |
11 | Operator Ekspresi Reguler Contoh ini menjelaskan dua bentuk operator ekspresi reguler. |
AWK sangat kuat dan efisien dalam menangani ekspresi reguler. Sejumlah tugas kompleks dapat diselesaikan dengan ekspresi reguler sederhana. Semua pakar baris perintah mengetahui kekuatan ekspresi reguler.
Bab ini membahas ekspresi reguler standar dengan contoh yang sesuai.
Dot
Ini cocok dengan salah satu karakter kecuali akhir karakter baris. Misalnya, contoh berikut cocokfin, fun, fan dll.
Contoh
[jerry]$ echo -e "cat\nbat\nfun\nfin\nfan" | awk '/f.n/'
Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut -
Keluaran
fun
fin
fan
Awal baris
Ini cocok dengan awal baris. Misalnya, contoh berikut mencetak semua garis yang dimulai dengan polaThe.
Contoh
[jerry]$ echo -e "This\nThat\nThere\nTheir\nthese" | awk '/^The/'
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Keluaran
There
Their
Akhir baris
Ini cocok dengan akhir baris. Misalnya, contoh berikut mencetak baris yang diakhiri dengan hurufn.
Contoh
[jerry]$ echo -e "knife\nknow\nfun\nfin\nfan\nnine" | awk '/n$/'
Keluaran
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
fun
fin
fan
Cocokkan set karakter
Ini digunakan untuk mencocokkan hanya satu dari beberapa karakter. Misalnya, contoh berikut ini cocok dengan polaCall dan Tall tapi tidak Ball.
Contoh
[jerry]$ echo -e "Call\nTall\nBall" | awk '/[CT]all/'
Keluaran
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Call
Tall
Set eksklusif
Dalam himpunan eksklusif, karat meniadakan himpunan karakter dalam tanda kurung siku. Misalnya, contoh berikut hanya mencetakBall.
Contoh
[jerry]$ echo -e "Call\nTall\nBall" | awk '/[^CT]all/'
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Keluaran
Ball
Perubahan
Bilah vertikal memungkinkan ekspresi reguler di ORed secara logis. Misalnya, contoh cetakan berikutBall dan Call.
Contoh
[jerry]$ echo -e "Call\nTall\nBall\nSmall\nShall" | awk '/Call|Ball/'
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Keluaran
Call
Ball
Nol atau Satu Kejadian
Ini cocok dengan nol atau satu kemunculan karakter sebelumnya. Misalnya, contoh berikut cocokColour sebaik Color. Kami telah membuatu sebagai karakter opsional dengan menggunakan ?.
Contoh
[jerry]$ echo -e "Colour\nColor" | awk '/Colou?r/'
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Keluaran
Colour
Color
Zero atau More Occurrence
Ini cocok dengan nol atau lebih kemunculan dari karakter sebelumnya. Misalnya, contoh berikut cocokca, cat, catt, dan seterusnya.
Contoh
[jerry]$ echo -e "ca\ncat\ncatt" | awk '/cat*/'
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Keluaran
ca
cat
catt
Satu atau Lebih Kejadian
Ini cocok dengan satu atau lebih kemunculan karakter sebelumnya. Misalnya contoh di bawah ini cocok dengan satu atau lebih kejadian dari2.
Contoh
[jerry]$ echo -e "111\n22\n123\n234\n456\n222" | awk '/2+/'
Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut -
Keluaran
22
123
234
222
Pengelompokan
Parentheses ()digunakan untuk pengelompokan dan karakter | digunakan sebagai alternatif. Misalnya, ekspresi reguler berikut cocok dengan baris yang berisi keduanyaApple Juice or Apple Cake.
Contoh
[jerry]$ echo -e "Apple Juice\nApple Pie\nApple Tart\nApple Cake" | awk
'/Apple (Juice|Cake)/'
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Keluaran
Apple Juice
Apple Cake
AWK memiliki array asosiatif dan salah satu hal terbaiknya adalah - indeks tidak perlu berupa kumpulan angka yang berkelanjutan; Anda dapat menggunakan string atau angka sebagai indeks array. Selain itu, tidak perlu mendeklarasikan ukuran array terlebih dahulu - array dapat meluas / menyusut saat runtime.
Sintaksnya adalah sebagai berikut -
Sintaksis
array_name[index] = value
Dimana array_name adalah nama array, index adalah indeks array, dan value adalah nilai apa pun yang diberikan ke elemen array.
Membuat Array
Untuk mendapatkan lebih banyak wawasan tentang larik, mari kita membuat dan mengakses elemen larik.
Contoh
[jerry]$ awk 'BEGIN {
fruits["mango"] = "yellow";
fruits["orange"] = "orange"
print fruits["orange"] "\n" fruits["mango"]
}'
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Keluaran
orange
yellow
Dalam contoh di atas, kami mendeklarasikan array sebagai fruitsyang indeksnya adalah nama buah dan nilainya adalah warna buah. Untuk mengakses elemen array, kami menggunakanarray_name[index] format.
Menghapus Elemen Array
Untuk penyisipan, kami menggunakan operator penugasan. Demikian pula yang bisa kita gunakandeletepernyataan untuk menghapus elemen dari array. Sintaks dari pernyataan delete adalah sebagai berikut -
Sintaksis
delete array_name[index]
Contoh berikut menghapus elemen orange. Oleh karena itu, perintah tidak menampilkan keluaran apa pun.
Contoh
[jerry]$ awk 'BEGIN {
fruits["mango"] = "yellow";
fruits["orange"] = "orange";
delete fruits["orange"];
print fruits["orange"]
}'
Array Multi-Dimensi
AWK hanya mendukung array satu dimensi. Namun Anda dapat dengan mudah menyimulasikan larik multi-dimensi menggunakan larik satu dimensi itu sendiri.
Misalnya, yang diberikan di bawah ini adalah array dua dimensi 3x3 -
100 200 300
400 500 600
700 800 900
Dalam contoh di atas, array [0] [0] menyimpan 100, array [0] [1] menyimpan 200, dan seterusnya. Untuk menyimpan 100 di lokasi array [0] [0], kita dapat menggunakan sintaks berikut -
Sintaksis
array["0,0"] = 100
Padahal kami memberi 0,0sebagai indeks, ini bukan dua indeks. Pada kenyataannya, itu hanya satu indeks dengan string0,0.
Contoh berikut mensimulasikan larik 2-D -
Contoh
[jerry]$ awk 'BEGIN {
array["0,0"] = 100;
array["0,1"] = 200;
array["0,2"] = 300;
array["1,0"] = 400;
array["1,1"] = 500;
array["1,2"] = 600;
# print array elements
print "array[0,0] = " array["0,0"];
print "array[0,1] = " array["0,1"];
print "array[0,2] = " array["0,2"];
print "array[1,0] = " array["1,0"];
print "array[1,1] = " array["1,1"];
print "array[1,2] = " array["1,2"];
}'
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Keluaran
array[0,0] = 100
array[0,1] = 200
array[0,2] = 300
array[1,0] = 400
array[1,1] = 500
array[1,2] = 600
Anda juga dapat melakukan berbagai operasi pada larik seperti mengurutkan elemen / indeksnya. Untuk tujuan itu, Anda bisa menggunakanassort dan asorti fungsi
Seperti bahasa pemrograman lainnya, AWK menyediakan pernyataan bersyarat untuk mengontrol aliran program. Bab ini menjelaskan pernyataan kontrol AWK dengan contoh yang sesuai.
Jika pernyataan
Ini hanya menguji kondisi dan melakukan tindakan tertentu tergantung pada kondisinya. Diberikan di bawah ini adalah sintaksif pernyataan -
Sintaksis
if (condition)
action
Kami juga dapat menggunakan sepasang kurung kurawal seperti yang diberikan di bawah ini untuk menjalankan beberapa tindakan -
Sintaksis
if (condition) {
action-1
action-1
.
.
action-n
}
Misalnya, contoh berikut memeriksa apakah suatu angka genap atau tidak -
Contoh
[jerry]$ awk 'BEGIN {num = 10; if (num % 2 == 0) printf "%d is even number.\n", num }'
Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut -
Keluaran
10 is even number.
Pernyataan Jika Lain
Di if-else sintaks, kami dapat memberikan daftar tindakan yang akan dilakukan ketika kondisi menjadi salah.
Sintaks dari if-else pernyataannya adalah sebagai berikut -
Sintaksis
if (condition)
action-1
else
action-2
Dalam sintaks di atas, tindakan-1 dilakukan saat kondisi bernilai benar dan tindakan-2 dilakukan saat kondisi bernilai salah. Misalnya, contoh berikut memeriksa apakah suatu angka genap atau tidak -
Contoh
[jerry]$ awk 'BEGIN {
num = 11; if (num % 2 == 0) printf "%d is even number.\n", num;
else printf "%d is odd number.\n", num
}'
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Keluaran
11 is odd number.
If-Else-If Ladder
Kita dapat dengan mudah membuat file if-else-if tangga dengan menggunakan beberapa if-elsepernyataan. Contoh berikut menunjukkan ini -
Contoh
[jerry]$ awk 'BEGIN {
a = 30;
if (a==10)
print "a = 10";
else if (a == 20)
print "a = 20";
else if (a == 30)
print "a = 30";
}'
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Keluaran
a = 30
Bab ini menjelaskan loop AWK dengan contoh yang sesuai. Loop digunakan untuk menjalankan serangkaian tindakan secara berulang. Eksekusi loop terus berlanjut selama kondisi loop benar.
Untuk Loop
Sintaks dari for loop adalah -
Sintaksis
for (initialization; condition; increment/decrement)
action
Awalnya, file forpernyataan melakukan tindakan inisialisasi, kemudian memeriksa kondisi. Jika kondisinya benar, ia menjalankan tindakan, kemudian melakukan operasi penambahan atau pengurangan. Eksekusi loop berlanjut selama kondisinya benar. Misalnya, contoh berikut mencetak 1 hingga 5 menggunakanfor putaran -
Contoh
[jerry]$ awk 'BEGIN { for (i = 1; i <= 5; ++i) print i }'
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Keluaran
1
2
3
4
5
Sedangkan Loop
Itu whileloop terus menjalankan tindakan sampai kondisi logis tertentu bernilai true. Berikut adalah sintakswhile putaran -
Sintaksis
while (condition)
action
AWK mengecek dulu kondisinya; jika kondisinya benar, tindakan akan dijalankan. Proses ini berulang selama kondisi loop bernilai true. Misalnya, contoh berikut mencetak 1 hingga 5 menggunakanwhile putaran -
Contoh
[jerry]$ awk 'BEGIN {i = 1; while (i < 6) { print i; ++i } }'
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Keluaran
1
2
3
4
5
Do-While Loop
Itu do-whileloop mirip dengan loop sementara, kecuali bahwa kondisi pengujian dievaluasi di akhir loop. Berikut adalah sintaksdo-whileputaran -
Sintaksis
do
action
while (condition)
Di sebuah do-whileloop, pernyataan tindakan dijalankan setidaknya sekali bahkan ketika pernyataan kondisi bernilai false. Misalnya, contoh berikut mencetak 1 hingga 5 angka menggunakando-while putaran -
Contoh
[jerry]$ awk 'BEGIN {i = 1; do { print i; ++i } while (i < 6) }'
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Keluaran
1
2
3
4
5
Pernyataan Istirahat
Seperti namanya, ini digunakan untuk mengakhiri eksekusi loop. Berikut adalah contoh yang mengakhiri pengulangan ketika jumlahnya menjadi lebih besar dari 50.
Contoh
[jerry]$ awk 'BEGIN {
sum = 0; for (i = 0; i < 20; ++i) {
sum += i; if (sum > 50) break; else print "Sum =", sum
}
}'
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Keluaran
Sum = 0
Sum = 1
Sum = 3
Sum = 6
Sum = 10
Sum = 15
Sum = 21
Sum = 28
Sum = 36
Sum = 45
Pernyataan Lanjutan
Itu continuepernyataan digunakan di dalam loop untuk melompat ke iterasi berikutnya dari loop. Ini berguna ketika Anda ingin melewatkan pemrosesan beberapa data di dalam loop. Misalnya, contoh berikut menggunakancontinue pernyataan untuk mencetak bilangan genap antara 1 hingga 20.
Contoh
[jerry]$ awk 'BEGIN {
for (i = 1; i <= 20; ++i) {
if (i % 2 == 0) print i ; else continue
}
}'
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Keluaran
2
4
6
8
10
12
14
16
18
20
Pernyataan Keluar
Ini digunakan untuk menghentikan eksekusi skrip. Ini menerima integer sebagai argumen yang merupakan kode status keluar untuk proses AWK. Jika tidak ada argumen yang diberikan,exitmengembalikan status nol. Berikut adalah contoh yang menghentikan eksekusi ketika jumlahnya menjadi lebih dari 50.
Contoh
[jerry]$ awk 'BEGIN {
sum = 0; for (i = 0; i < 20; ++i) {
sum += i; if (sum > 50) exit(10); else print "Sum =", sum
}
}'
Keluaran
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Sum = 0
Sum = 1
Sum = 3
Sum = 6
Sum = 10
Sum = 15
Sum = 21
Sum = 28
Sum = 36
Sum = 45
Mari kita periksa status pengembalian skrip.
Contoh
[jerry]$ echo $?
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Keluaran
10
AWK memiliki sejumlah fungsi bawaan yang selalu tersedia untuk programmer. Bab ini menjelaskan Aritmatika, String, Waktu, manipulasi Bit, dan fungsi lain-lain dengan contoh yang sesuai.
S.No. | Fungsi & Deskripsi bawaan |
---|---|
1 | Fungsi Aritmatika AWK memiliki fungsi aritmatika bawaan berikut. |
2 | Fungsi String AWK memiliki fungsi String bawaan berikut. |
3 | Fungsi Waktu AWK memiliki fungsi waktu bawaan berikut. |
4 | Fungsi Manipulasi Bit AWK memiliki fungsi manipulasi bit bawaan berikut ini. |
5 | Fungsi Miscellaneous AWK memiliki fungsi lain-lain berikut ini. |
Fungsi adalah blok bangunan dasar dari sebuah program. AWK memungkinkan kita untuk mendefinisikan fungsi kita sendiri. Program besar dapat dibagi menjadi beberapa fungsi dan setiap fungsi dapat ditulis / diuji secara independen. Ini menyediakan kode yang dapat digunakan kembali.
Diberikan di bawah ini adalah format umum dari fungsi yang ditentukan pengguna -
Sintaksis
function function_name(argument1, argument2, ...) {
function body
}
Dalam sintaks ini, file function_nameadalah nama fungsi yang ditentukan pengguna. Nama fungsi harus dimulai dengan huruf dan karakter lainnya dapat berupa kombinasi angka, karakter alfabet, atau garis bawah. Kata cadangan AWK tidak dapat digunakan sebagai nama fungsi.
Fungsi dapat menerima beberapa argumen yang dipisahkan dengan koma. Argumen tidak wajib. Anda juga dapat membuat fungsi yang ditentukan pengguna tanpa argumen apa pun.
function body terdiri dari satu atau lebih pernyataan AWK.
Mari kita tulis dua fungsi yang menghitung jumlah minimum dan maksimum dan memanggil fungsi-fungsi ini dari fungsi lain yang dipanggil main. Itufunctions.awk file berisi -
Contoh
# Returns minimum number
function find_min(num1, num2){
if (num1 < num2)
return num1
return num2
}
# Returns maximum number
function find_max(num1, num2){
if (num1 > num2)
return num1
return num2
}
# Main function
function main(num1, num2){
# Find minimum number
result = find_min(10, 20)
print "Minimum =", result
# Find maximum number
result = find_max(10, 20)
print "Maximum =", result
}
# Script execution starts here
BEGIN {
main(10, 20)
}
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Keluaran
Minimum = 10
Maximum = 20
Sejauh ini, kami menampilkan data pada aliran keluaran standar. Kami juga dapat mengarahkan data ke file. Sebuah pengalihan muncul setelahprint atau printfpernyataan. Pengalihan di AWK ditulis seperti pengalihan di perintah shell, kecuali yang ditulis di dalam program AWK. Bab ini menjelaskan pengalihan dengan contoh yang sesuai.
Operator Pengalihan
Sintaks dari operator redirection adalah -
Sintaksis
print DATA > output-file
Ini menulis data ke output-file. Jika file-keluaran tidak ada, maka itu membuatnya. Ketika jenis pengalihan ini digunakan, file keluaran dihapus sebelum keluaran pertama dituliskan padanya. Operasi tulis berikutnya ke file keluaran yang sama tidak menghapus file keluaran, tetapi menambahkannya. Misalnya, contoh berikut menulisHello, World !!! ke file.
Mari kita buat file dengan beberapa data teks.
Contoh
[jerry]$ echo "Old data" > /tmp/message.txt [jerry]$ cat /tmp/message.txt
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Keluaran
Old data
Sekarang mari kita mengarahkan beberapa konten ke dalamnya menggunakan operator pengalihan AWK.
Contoh
[jerry]$ awk 'BEGIN { print "Hello, World !!!" > "/tmp/message.txt" }' [jerry]$ cat /tmp/message.txt
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Keluaran
Hello, World !!!
Tambahkan Operator
Sintaks operator append adalah sebagai berikut -
Sintaksis
print DATA >> output-file
Ini menambahkan data ke dalam file output-file. Jika file-keluaran tidak ada, maka itu membuatnya. Saat jenis pengalihan ini digunakan, konten baru ditambahkan di akhir file. Misalnya, contoh berikut ditambahkanHello, World !!! ke file.
Mari kita buat file dengan beberapa data teks.
Contoh
[jerry]$ echo "Old data" > /tmp/message.txt [jerry]$ cat /tmp/message.txt
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Keluaran
Old data
Sekarang mari kita tambahkan beberapa konten ke dalamnya menggunakan operator append AWK.
Contoh
[jerry]$ awk 'BEGIN { print "Hello, World !!!" >> "/tmp/message.txt" }' [jerry]$ cat /tmp/message.txt
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Keluaran
Old data
Hello, World !!!
Pipa
Dimungkinkan untuk mengirim output ke program lain melalui pipa daripada menggunakan file. Pengalihan ini membuka pipa ke perintah, dan menulis nilai item melalui pipa ini ke proses lain untuk menjalankan perintah. Perintah argumen pengalihan sebenarnya adalah ekspresi AWK. Berikut adalah sintaks pipa -
Sintaksis
print items | command
Mari kita gunakan tr perintah untuk mengubah huruf kecil menjadi huruf besar.
Contoh
[jerry]$ awk 'BEGIN { print "hello, world !!!" | "tr [a-z] [A-Z]" }'
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Keluaran
HELLO, WORLD !!!
Komunikasi dua arah
AWK dapat berkomunikasi dengan proses eksternal menggunakan |&, yaitu komunikasi dua arah. Misalnya, contoh berikut menggunakantrperintah untuk mengubah huruf kecil menjadi huruf besar. Kamicommand.awk file berisi -
Contoh
BEGIN {
cmd = "tr [a-z] [A-Z]"
print "hello, world !!!" |& cmd
close(cmd, "to")
cmd |& getline out
print out;
close(cmd);
}
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Keluaran
HELLO, WORLD !!!
Apakah skripnya terlihat samar? Mari kita mengungkapnya.
Pernyataan pertama, cmd = "tr [a-z] [A-Z]", adalah perintah yang kami gunakan untuk membangun komunikasi dua arah dari AWK.
Pernyataan berikutnya, yaitu, perintah cetak memberikan masukan ke trperintah. Sini&| menunjukkan komunikasi dua arah.
Pernyataan ketiga, yaitu, close(cmd, "to"), tutup to proses setelah bersaing pelaksanaannya.
Pernyataan selanjutnya cmd |& getline out menyimpan output ke dalam variabel dengan bantuan fungsi getline.
Pernyataan cetak berikutnya mencetak keluaran dan terakhir close fungsi menutup perintah.
Sejauh ini kami telah menggunakan AWK print dan printfberfungsi untuk menampilkan data pada keluaran standar. Tapi printf jauh lebih kuat dari apa yang telah kita lihat sebelumnya. Fungsi ini dipinjam dari bahasa C dan sangat membantu saat menghasilkan keluaran yang diformat. Di bawah ini adalah sintaks dari pernyataan printf -
Sintaksis
printf fmt, expr-list
Dalam sintaks di atas fmt adalah rangkaian spesifikasi dan konstanta format. expr-list adalah daftar argumen yang sesuai dengan penentu format.
Escape Sequences
Mirip dengan string apa pun, format dapat berisi urutan escape yang disematkan. Dibahas di bawah ini adalah urutan escape yang didukung oleh AWK -
Garis baru
Contoh cetakan berikut Hello dan World di baris terpisah menggunakan karakter baris baru -
Example
[jerry]$ awk 'BEGIN { printf "Hello\nWorld\n" }'
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Output
Hello
World
Tab Horizontal
Contoh berikut menggunakan tab horizontal untuk menampilkan bidang yang berbeda -
Example
[jerry]$ awk 'BEGIN { printf "Sr No\tName\tSub\tMarks\n" }'
Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut -
Output
Sr No Name Sub Marks
Tab Vertikal
Contoh berikut menggunakan tab vertikal setelah setiap bidang -
Example
[jerry]$ awk 'BEGIN { printf "Sr No\vName\vSub\vMarks\n" }'
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Output
Sr No
Name
Sub
Marks
Menghapus
Contoh berikut mencetak spasi mundur setelah setiap bidang kecuali yang terakhir. Ini menghapus nomor terakhir dari tiga bidang pertama. Misalnya,Field 1 ditampilkan sebagai Field, karena karakter terakhir dihapus dengan spasi mundur. Namun, bidang terakhirField 4 ditampilkan sebagaimana adanya, karena kami tidak memiliki file \b setelah Field 4.
Example
[jerry]$ awk 'BEGIN { printf "Field 1\bField 2\bField 3\bField 4\n" }'
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Output
Field Field Field Field 4
Kereta kembali
Dalam contoh berikut, setelah mencetak setiap bidang, kami melakukan a Carriage Return dan mencetak nilai berikutnya di atas nilai tercetak saat ini. Artinya, pada hasil akhir, Anda hanya bisa melihatField 4, karena ini adalah hal terakhir yang akan dicetak di atas semua bidang sebelumnya.
Example
[jerry]$ awk 'BEGIN { printf "Field 1\rField 2\rField 3\rField 4\n" }'
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Output
Field 4
Formulir Pakan
Contoh berikut menggunakan pengumpanan formulir setelah mencetak setiap bidang.
Example
[jerry]$ awk 'BEGIN { printf "Sr No\fName\fSub\fMarks\n" }'
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Output
Sr No
Name
Sub
Marks
Penentu Format
Seperti dalam bahasa C, AWK juga memiliki penentu format. Versi AWK dari pernyataan printf menerima format spesifikasi konversi berikut -
% c
Ini mencetak satu karakter. Jika argumen digunakan untuk%cadalah numerik, diperlakukan sebagai karakter dan dicetak. Jika tidak, argumen dianggap sebagai string, dan satu-satunya karakter pertama dari string itu yang dicetak.
Example
[jerry]$ awk 'BEGIN { printf "ASCII value 65 = character %c\n", 65 }'
Output
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
ASCII value 65 = character A
% d dan% i
Ini hanya mencetak bagian integer dari angka desimal.
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %d\n", 80.66 }'
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Output
Percentags = 80
% e dan% E
Ini mencetak nomor floating point dari bentuk [-] d.dddddde [+ -] dd.
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %E\n", 80.66 }'
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Output
Percentags = 8.066000e+01
Itu %E format menggunakan E bukan e.
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %e\n", 80.66 }'
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Output
Percentags = 8.066000E+01
% f
Ini mencetak nomor floating point dari bentuk [-] ddd.dddddd.
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %f\n", 80.66 }'
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Output
Percentags = 80.660000
% g dan% G
Menggunakan% e atau% f konversi, mana saja yang lebih pendek, dengan nol non-signifikan disembunyikan.
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %g\n", 80.66 }'
Output
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Percentags = 80.66
Itu %G format menggunakan %E bukannya% e.
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %G\n", 80.66 }'
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Output
Percentags = 80.66
%Hai
Ini mencetak nomor oktal yang tidak bertanda tangan.
Example
[jerry]$ awk 'BEGIN { printf "Octal representation of decimal number 10 = %o\n", 10}'
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Output
Octal representation of decimal number 10 = 12
% u
Ini mencetak angka desimal yang tidak bertanda tangan.
Example
[jerry]$ awk 'BEGIN { printf "Unsigned 10 = %u\n", 10 }'
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Output
Unsigned 10 = 10
% s
Ini mencetak string karakter.
Example
[jerry]$ awk 'BEGIN { printf "Name = %s\n", "Sherlock Holmes" }'
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Output
Name = Sherlock Holmes
% x dan% X
Ini mencetak angka heksadesimal unsigned. Itu%X format menggunakan huruf besar, bukan huruf kecil.
Example
[jerry]$ awk 'BEGIN {
printf "Hexadecimal representation of decimal number 15 = %x\n", 15
}'
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Output
Hexadecimal representation of decimal number 15 = f
Sekarang gunakan% X dan amati hasilnya -
Example
[jerry]$ awk 'BEGIN {
printf "Hexadecimal representation of decimal number 15 = %X\n", 15
}'
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Output
Hexadecimal representation of decimal number 15 = F
%%
Ini mencetak satu % karakter dan tidak ada argumen yang dikonversi.
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %d%%\n", 80.66 }'
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Output
Percentags = 80%
Parameter Opsional dengan%
Dengan % kita dapat menggunakan parameter opsional berikut -
Lebar
Bidang empuk ke width. Secara default, field diisi dengan spasi tetapi ketika flag 0 digunakan, field tersebut diisi dengan nol.
Example
[jerry]$ awk 'BEGIN {
num1 = 10; num2 = 20; printf "Num1 = %10d\nNum2 = %10d\n", num1, num2
}'
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Output
Num1 = 10
Num2 = 20
Leading Zero
Nol di depan berfungsi sebagai bendera, yang menunjukkan bahwa keluaran harus diisi dengan nol, bukan spasi. Harap dicatat bahwa bendera ini hanya berpengaruh jika bidang lebih lebar dari nilai yang akan dicetak. Contoh berikut menjelaskan ini -
Example
[jerry]$ awk 'BEGIN {
num1 = -10; num2 = 20; printf "Num1 = %05d\nNum2 = %05d\n", num1, num2
}'
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Output
Num1 = -0010
Num2 = 00020
Justifikasi Kiri
Ekspresi harus rata kiri dalam bidangnya. Ketika string input lebih kecil dari jumlah karakter yang ditentukan, dan Anda ingin itu dibiarkan rata, yaitu dengan menambahkan spasi ke kanan, gunakan simbol minus (-) segera setelah% dan sebelum angka.
Dalam contoh berikut, output dari perintah AWK disalurkan ke perintah cat untuk menampilkan karakter END OF LINE ($).
Example
[jerry]$ awk 'BEGIN { num = 10; printf "Num = %-5d\n", num }' | cat -vte
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Output
Num = 10 $
Tanda Awalan
Itu selalu mengawali nilai numerik dengan tanda, bahkan jika nilainya positif.
Example
[jerry]$ awk 'BEGIN {
num1 = -10; num2 = 20; printf "Num1 = %+d\nNum2 = %+d\n", num1, num2
}'
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Output
Num1 = -10
Num2 = +20
Hash
Untuk% o, ini memberikan nol di depan. Untuk% x dan% X, ini menyediakan 0x atau 0X di depan masing-masing, hanya jika hasilnya bukan nol. Untuk% e,% E,% f, dan% F, hasilnya selalu berisi titik desimal. Untuk% g dan% G, angka nol di belakang tidak dihapus dari hasil. Contoh berikut menjelaskan ini -
Example
[jerry]$ awk 'BEGIN {
printf "Octal representation = %#o\nHexadecimal representaion = %#X\n", 10, 10
}'
Saat menjalankan kode ini, Anda mendapatkan hasil sebagai berikut -
Output
Octal representation = 012
Hexadecimal representation = 0XA