Bagaimana Menulis AWK Perintah dan Skrip

Perintah, sintaks, dan contoh

Perintah awk adalah kaedah yang berkuasa untuk memproses atau menganalisis fail teks-khususnya, fail data yang dianjurkan oleh baris (baris) dan lajur.

Perintah awk sederhana boleh dijalankan dari baris arahan . Tugas yang lebih kompleks harus ditulis sebagai program awk (skrip awk yang disebut) ke fail.

Format asas arahan awk kelihatan seperti ini:

awk 'pattern {action}' input-file> output-file

Ini bermakna: ambil setiap baris fail input; jika garisan itu mengandungi corak yang dikenakan tindakan ke garisan dan tulis garisan yang dihasilkan ke fail output. Sekiranya corak itu ditinggalkan, tindakan itu digunakan untuk semua baris. Sebagai contoh:

awk '{print $ 5}' table1.txt> output1.txt

Pernyataan ini mengambil elemen pada baris ke-5 setiap baris dan menulisnya sebagai baris dalam output file "output.txt". Pembolehubah '$ 4' merujuk kepada lajur kedua. Begitu juga anda boleh mengakses lajur pertama, kedua, dan ketiga, dengan $ 1, $ 2, $ 3, dan lain-lain. Dengan lajur lalai diandaikan dipisahkan oleh ruang atau tab (dipanggil ruang putih). Jadi, jika fail input "table1.txt" mengandungi garisan-garisan berikut:

1, Justin Timberlake, Title 545, Harga $ 7.30 2, Taylor Swift, Judul 723, Harga $ 7.90 3, Mick Jagger, Judul 610, Harga $ 7.90 4, Lady Gaga, Judul 118, Harga $ 7.30 5, Johnny Cash, Judul 482, Harga $ 6.50 6, Elvis Presley, Judul 335, Harga $ 7.30 7, John Lennon, Judul 271, Harga $ 7,90 8, Michael Jackson, Judul 373, Harga $ 5.50

Kemudian arahan itu akan menulis baris berikut ke fail output "output1.txt":

545, 723, 610, 118, 482, 335, 271, 373,

Jika pemisah lajur adalah sesuatu yang lain daripada ruang atau tab, seperti koma, anda boleh menentukan bahawa dalam pernyataan awk seperti berikut:

awk -F, '{print $ 3}' table1.txt> output1.txt

Ini akan memilih elemen dari lajur 3 setiap baris jika lajur dianggap dipisahkan oleh koma. Oleh itu output, dalam kes ini, akan:

Tajuk 545 Tajuk 723 Tajuk 610 Tajuk 118 Tajuk 482 Tajuk 335 Tajuk 271 Tajuk 373

Senarai penyataan dalam kurungan kurungan ('{', '}') dipanggil blok. Jika anda meletakkan ungkapan bersyarat di hadapan blok, pernyataan di dalam blok akan dilaksanakan hanya jika keadaan itu benar.

awk '$ 7 == "\ $ 7.30" {print $ 3}' table1.txt

Dalam kes ini, keadaannya ialah $ 7 == "\ $ 7.30", yang bermaksud bahawa elemen di lajur 7 adalah sama dengan $ 7.30. Backslash di hadapan tanda dolar digunakan untuk menghalang sistem daripada menafsirkan $ 7 sebagai pembolehubah dan sebaliknya mengambil tanda dolar secara harfiah.

Jadi pernyataan awk ini mencetak elemen di lajur ketiga setiap baris yang mempunyai "$ 7.30" pada lajur 7.

Anda juga boleh menggunakan ungkapan biasa sebagai syarat. Sebagai contoh:

awk '/ 30 / {print $ 3}' table1.txt

Rentetan antara dua garis miring ('/') adalah ungkapan biasa. Dalam kes ini, ia hanya rentetan "30." Ini bermakna jika garisan mengandungi rentetan "30", sistem itu mencetak elemen pada lajur ketiga garisan itu. Keluaran dalam contoh di atas ialah:

Timberlake, Gaga, Presley,

Sekiranya unsur-unsur jadual adalah awk boleh menjalankan pengiraan ke atasnya seperti dalam contoh ini:

awk '{print ($ 2 * $ 3) + $ 7}'

Selain itu, pemboleh ubah yang mengakses unsur baris semasa ($ 1, $ 2, dan sebagainya) terdapat pembolehubah $ 0 yang merujuk kepada baris lengkap (baris), dan NF pembolehubah yang memegang kepada bilangan medan.

Anda juga boleh menentukan pemboleh ubah baru seperti dalam contoh ini:

awk '{sum = 0; untuk (col = 1; col <= NF; col ++) jumlah + = $ col; jumlah cetak; } '

Ini mengira dan mencetak jumlah semua unsur setiap baris.

Kenyataan Awk sering digabungkan dengan perintah sed .