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