Aduh

Cara Menggunakan AWK di Linux

Cara Menggunakan AWK di Linux

Tawaran utiliti Linux sering mengikuti falsafah reka bentuk UNIX. Alat apa pun mestilah kecil, gunakan teks biasa untuk I / O, dan beroperasi secara modular. Terima kasih kepada warisan, kami mempunyai beberapa fungsi pemprosesan teks terbaik dengan bantuan alat seperti sed dan awk.

Di Linux, alat awk sudah terpasang di semua distro Linux. AWK sendiri adalah bahasa pengaturcaraan. Alat AWK hanyalah jurubahasa bahasa pengaturcaraan AWK. Dalam panduan ini, periksa cara menggunakan AWK di Linux.

Penggunaan AWK

Alat AWK paling berguna apabila teks disusun dalam format yang dapat diramalkan. Ia cukup bagus dalam menguraikan dan memanipulasi data jadual. Ia beroperasi berdasarkan baris demi baris, pada keseluruhan fail teks.

Tingkah laku default awk adalah menggunakan ruang kosong (ruang, tab, dll.) untuk memisahkan bidang. Syukurlah, banyak fail konfigurasi di Linux mengikuti corak ini.

Sintaks asas

Ini adalah bagaimana struktur arahan awk.

$ awk '// ; ; '

Bahagian arahannya cukup jelas. Awk boleh beroperasi tanpa bahagian carian atau tindakan. Sekiranya tidak ada yang ditentukan, tindakan lalai pada perlawanan hanya akan dicetak. Pada dasarnya, awk akan mencetak semua padanan yang terdapat pada fail.

Sekiranya tidak ada corak carian yang ditentukan, maka awk akan melakukan tindakan yang ditentukan pada setiap baris fail.

Sekiranya kedua-dua bahagian diberikan, maka awk akan menggunakan corak untuk menentukan sama ada garis semasa mencerminkannya. Sekiranya dipadankan, maka awk melakukan tindakan yang ditentukan.

Perhatikan bahawa awk juga boleh berfungsi pada teks yang diarahkan. Ini dapat dicapai dengan memasukkan isi arahan untuk awk bertindak. Ketahui lebih lanjut mengenai arahan paip Linux.

Untuk tujuan demo, berikut adalah contoh fail teks. Ia mengandungi 10 baris, 2 perkataan setiap baris.

$ sampel kucing.txt

Ekspresi biasa

Salah satu ciri utama yang menjadikan awk sebagai alat yang kuat adalah sokongan ungkapan biasa (regex, pendeknya). Ungkapan biasa adalah rentetan yang mewakili corak watak tertentu.

Berikut adalah senarai beberapa sintaks ungkapan biasa yang paling biasa. Sintaks regex ini tidak hanya unik untuk awk. Ini adalah sintaks regex yang hampir universal, jadi menguasainya juga akan membantu dalam aplikasi / pengaturcaraan lain yang melibatkan ekspresi biasa.

  • Watak asas: Semua huruf alfanumerik garis bawah (_) dll.
    • Kumpulan aksara: Untuk mempermudah sesuatu, terdapat kumpulan watak dalam regex. Contohnya, huruf besar (A-Z), huruf kecil (a-z), dan angka angka (0-9).
  • Meta-watak: Ini adalah watak yang menerangkan pelbagai cara untuk mengembangkan watak biasa.
    • Tempoh (.): Sebarang perlawanan watak dalam kedudukan itu sah (kecuali garis baru).
    • Tanda bintang (*): Kehadiran sifar atau lebih banyak watak langsung sebelum ia sah.
    • Kurungan ([]): Pertandingan berlaku jika, pada posisi, mana-mana watak dari kurungan sesuai. Ia boleh digabungkan dengan set watak.
    • Caret (^): Perlawanan harus di awal garisan.
    • Dolar ($): Perlawanan harus di hujung garisan.
    • Tanda Belakang (\): Sekiranya ada watak meta harus digunakan dalam pengertian harfiah.

Mencetak teks

Untuk mencetak semua kandungan fail teks, gunakan perintah cetak. Bagi corak carian, tidak ada corak yang ditentukan. Jadi, awk mencetak semua baris.

$ awk 'print' contoh.txt

Di sini, "cetak" adalah perintah AWK yang mencetak isi input.

Pencarian rentetan

AWK dapat melakukan carian teks asas pada teks yang diberikan. Di bahagian corak, ia mesti menjadi teks yang dapat dicari.

Dalam perintah berikut, awk akan mencari teks "cepat" pada semua baris sampel fail.txt.

$ awk '/ cepat /' sampel.txt

Sekarang, mari kita gunakan beberapa ungkapan biasa untuk memperincikan carian. Perintah berikut akan mencetak semua baris yang mempunyai "coklat" pada awalnya.

$ awk '/ ^ coklat /' sampel.txt

Bagaimana dengan mencari sesuatu di hujung talian? Perintah berikut akan mencetak semua baris yang mempunyai "cepat" di akhir.

$ awk '/ cepat $ /' sampel.txt

Corak kad liar

Contoh seterusnya ialah menunjukkan penggunaan karet (.). Di sini, boleh ada dua watak sebelum watak "e".

$ awk '/ ... e /' sampel.txt

Corak kad liar (menggunakan tanda bintang)

Bagaimana jika terdapat sejumlah watak di lokasi? Untuk mencocokkan kemungkinan watak di posisi, gunakan tanda bintang (*). Di sini, AWK akan memadankan semua baris yang mempunyai jumlah aksara selepas "the".

$ awk '/ sampel * /'.txt

Ungkapan kurungan

Contoh berikut akan menunjukkan cara menggunakan ungkapan kurungan. Ungkapan kurungan memberitahu bahawa di lokasi, pertandingan akan berlaku jika sesuai dengan set karakter yang dilampirkan oleh tanda kurung. Sebagai contoh, perintah berikut akan sesuai dengan "The" dan "Tee" sebagai padanan yang sah.

$ awk '/ T [dia] e /' sampel.txt

Terdapat beberapa set watak yang telah ditentukan dalam ungkapan biasa. Sebagai contoh, kumpulan semua huruf besar dilabel sebagai "A-Z". Dalam perintah berikut, awk akan memadankan semua perkataan yang mengandungi huruf besar.

$ awk '/ [A-Z] /' sampel.txt

Lihat penggunaan set watak berikut dengan ekspresi kurungan.

  • [0-9]: Menunjukkan satu digit
  • [a-z]: Menunjukkan huruf kecil tunggal
  • [A-Z]: Menunjukkan huruf besar tunggal
  • [a-zA-z]: Menunjukkan satu huruf
  • [a-zA-z 0-9]: Menunjukkan satu aksara atau digit.

Awk pemboleh ubah yang telah ditentukan

AWK dilengkapi dengan sekumpulan pemboleh ubah yang telah ditentukan dan automatik. Pemboleh ubah ini dapat menjadikan program penulisan dan skrip dengan AWK lebih mudah.

Berikut adalah beberapa pemboleh ubah AWK yang paling biasa yang anda akan temui.

  • NAMA FAIL: Nama fail fail input semasa.
  • RS: Pemisah rekod. Kerana sifat AWK, ia memproses data satu rekod pada satu masa. Di sini, pemboleh ubah ini menentukan pembatas yang digunakan untuk memisahkan aliran data menjadi rekod. Secara lalai, nilai ini adalah watak barisan baru.
  • NR: Nombor rekod input semasa. Sekiranya nilai RS ditetapkan ke lalai, maka nilai ini akan menunjukkan nombor baris input semasa.
  • FS / OFS: Karakter yang digunakan sebagai pemisah medan. Setelah dibaca, AWK membahagikan rekod ke dalam bidang yang berbeza. Pembatas ditentukan oleh nilai FS. Semasa mencetak, AWK menyatukan semula semua medan. Namun, pada masa ini, AWK menggunakan pemisah OFS dan bukannya pemisah FS. Secara amnya, kedua-dua FS dan OFS adalah sama tetapi tidak wajib berlaku.
  • NF: Bilangan medan dalam rekod semasa. Sekiranya nilai lalai "ruang kosong" digunakan, maka itu akan sesuai dengan jumlah kata dalam catatan semasa.
  • ORS: Pemisah rekod untuk data output. Nilai lalai adalah watak barisan baru.

Mari periksa mereka dalam tindakan. Perintah berikut akan menggunakan pemboleh ubah NR untuk mencetak baris 2 hingga baris 4 dari sampel.txt. AWK juga menyokong pengendali logik seperti logik dan (&&).

$ awk 'NR> 1 && NR < 5' sample.txt

Untuk menetapkan nilai tertentu ke pemboleh ubah AWK, gunakan struktur berikut.

$ awk '// ; ; ' =,

Sebagai contoh, untuk membuang semua baris kosong dari fail input, ubah nilai RS pada dasarnya tidak ada. Ini adalah muslihat yang menggunakan peraturan POSIX yang tidak jelas. Ini menentukan bahawa jika nilai RS adalah rentetan kosong, maka catatan dipisahkan oleh urutan yang terdiri dari garis baru dengan satu atau lebih baris kosong. Dalam POSIX, baris kosong tanpa isi kosong sepenuhnya. Namun, jika baris tersebut mengandungi ruang kosong, maka garis itu tidak dianggap "kosong".

$ awk 'print' RS = "contoh.txt

Sumber tambahan

AWK adalah alat yang hebat dengan banyak ciri. Walaupun panduan ini merangkumi banyak daripadanya, ini masih asasnya. Menguasai AWK akan memerlukan lebih daripada sekadar ini. Panduan ini harus menjadi pengenalan yang baik untuk alat ini.

Sekiranya anda benar-benar ingin menguasai alat tersebut, maka berikut adalah beberapa sumber tambahan yang harus anda periksa.

  • Potong ruang kosong
  • Menggunakan pernyataan bersyarat
  • Cetak pelbagai lajur
  • Regex dengan AWK
  • 20 contoh AWK

Internet adalah tempat yang baik untuk belajar sesuatu. Terdapat banyak tutorial hebat mengenai asas AWK untuk pengguna yang sangat maju.

Pemikiran terakhir

Mudah-mudahan, panduan ini membantu memberikan pemahaman yang baik mengenai asas-asas AWK. Walaupun memerlukan sedikit masa, menguasai AWK sangat bermanfaat dari segi kekuatan yang diberikannya.

Selamat pengkomputeran!

Shadow of the Tomb Raider untuk Tutorial Linux
Shadow of the Tomb Raider adalah penambahan kedua belas untuk siri Tomb Raider - francais permainan aksi-pengembaraan yang dibuat oleh Eidos Montreal....
Cara Meningkatkan FPS di Linux?
FPS bermaksud Bingkai sesaat. Tugas FPS adalah mengukur kadar bingkai dalam pemutaran video atau persembahan permainan. Dengan kata mudah bilangan gam...
Permainan Makmal Apl Oculus Teratas
Sekiranya anda adalah pemilik alat dengar Oculus, maka anda mesti mengetahui tentang memuatkan sideload. Sideloading adalah proses memasang kandungan ...