AMPUH !! Cara Menggunakan Perintah awk di Linux 2020

Di Linux, awk adalah dinamo manipulasi konten teks-baris perintah, selain bahasa skrip yang kuat. Di sini ada pengantar untuk beberapa opsi kerennya.

Bagaimana Awk Menerima Judulnya

Perintah awk dinamai menggunakan inisial dari tiga orang yang menulis model unik pada tahun 1977: Alfred Aho, Peter Weinberger, dan Brian Kernighan. Ketiga lelaki ini berasal dari panteon AT&T Bell Laboratories Unix yang legendaris. Dengan kontribusi banyak orang lain sejak itu, awk terus berkembang.

Ini adalah bahasa scripting lengkap, sebagai tambahan dari keseluruhan tool manipulasi konten tekstual untuk baris perintah. Jika teks ini menggerakkan hasrat Anda akan makanan, Anda mungkin dapat memeriksa setiap detail tentang awk dan kinerjanya.

Pedoman, Pola, dan Tindakan

awk bekerja pada aplikasi yang terdiri dari pedoman yang terdiri dari pola dan tindakan. Gerakan dijalankan pada konten tekstual yang cocok dengan sampel. Pola tertutup dalam kurung kurawal ({}). Secara kolektif, sampel dan gerakan mengetik aturan. Seluruh program awk Anda dilampirkan dalam tanda kutip tunggal (‘).

Mari kita periksa satu-satunya program awk. Tidak memiliki sampel, sehingga cocok dengan setiap baris konten tekstual yang dimasukkan ke dalamnya. Ini menyiratkan gerak dieksekusi pada setiap baris. Kami akan menggunakannya pada output dari perintah siapa.

Di sini adalah output yang biasa dari siapa:

siapa

Mungkin kami tidak menginginkan semua info itu, namun, cukup, hanya ingin melihat nama-nama di akun tersebut. Kami dapat menyalurkan output dari yang ke awk, setelah itu informasikan awk untuk mencetak semata-mata subjek utama.

Secara default, awk menganggap subjek sebagai serangkaian karakter yang dikelilingi oleh spasi, awal garis, atau ujung garis. Bidang dikenali oleh sinyal greenback ($) dan kuantitas. Jadi, $ 1 mewakili subjek utama, yang akan kita gunakan dengan gerakan cetak untuk mencetak subjek utama.

Kami mengurutkan berikutnya:

siapa | awk ‘{print $ 1}’

awk mencetak subjek utama dan membuang sisa jalan.

Kami dapat mencetak sebanyak mungkin bidang yang diinginkan. Jika kita menambahkan koma sebagai pemisah, awk mencetak area di antara setiap subjek.

Kami mengurutkan berikutnya untuk mencetak tambahan waktu orang tersebut login (subjek 4):

siapa | awk ‘{print $ 1, $ 4}’

Dikutip dari penulispro.id Ada beberapa pengidentifikasi subjek tertentu. Ini menandakan semua baris konten teks dan subjek akhir dalam baris konten teks:

$ 0: Merupakan semua baris konten teks.
$ 1: Merupakan subjek utama.
$ 2: Merupakan subjek kedua.
$ 7: Merupakan subjek ketujuh.
$ 45: Merupakan subjek ke-45.
$ NF: Singkatan dari “berbagai bidang,” dan mewakili subjek terakhir.

Kami akan mengurutkan berikutnya untuk membawa file konten teks kecil yang menyertakan kutipan singkat yang dikaitkan dengan Dennis Ritchie:

cat dennis_ritchie.txt

Kami ingin awk mencetak subjek kutipan utama, kedua, dan terakhir. Ketahuilah bahwa meskipun terbungkus dalam jendela terminal, itu hanya satu baris konten teks.

Kami mengurutkan perintah berikutnya:

awk ‘{print $ 1, $ 2, $ NF}’ dennis_ritchie.txt

Kami tidak tahu itu “kesederhanaan.” adalah subjek ke-18 dalam baris konten teks, dan kami tidak peduli. Yang kami tahu adalah itu adalah subjek terakhir, dan kami akan menggunakan $ NF untuk mendapatkan nilainya. Interval hanya dipikirkan tentang satu karakter lain dalam tubuh bola.

Termasuk Pemisah Disiplin Output

Anda juga dapat menginformasikan awk untuk mencetak karakter tertentu di antara bidang sebagai alternatif dari karakter area default. Output default dari perintah tanggal sedikit aneh karena waktu diproyeksikan tepat dalam perjalanannya. Meskipun demikian, kami akan mengurutkan berikutnya dan menggunakan awk untuk mengekstrak bidang yang kami inginkan:

tanggal | awk ‘{print $ 2, $ 3, $ 6}’

Kami akan menggunakan variabel OFS (pemisah subjek keluaran) untuk menempatkan pemisah antara bulan, hari, dan tahun. Ketahuilah bahwa di bawah ini kami lampirkan perintah dalam tanda kutip tunggal (‘), bukan kurung kurawal ({}):

tanggal | awk ‘OFS = “/” {print $ 2, $ 3, $ 6}’
tanggal | awk ‘OFS = “-” {print $ 2, $ 3, $ 6}’

Pedoman BEGIN dan END

Aturan BEGIN dijalankan segera sebelum proses pengolahan konten teks dimulai. Sebenarnya, ini dieksekusi lebih awal daripada awk bahkan membaca konten teks apa pun. Aturan AKHIR dijalankan dalam pemrosesan kasus apa pun yang telah diselesaikan. Anda mungkin dapat memiliki sejumlah pedoman BEGIN dan END, yang biasanya akan mereka lakukan.

Sebagai contoh aturan BEGIN kami, kami akan mencetak semua kutipan dari file dennis_ritchie.txt yang kami gunakan sebelumnya dengan judul di atasnya.

Untuk mengambil tindakan, kami mengurutkan perintah ini:

awk ‘BEGIN {print “Dennis Ritchie”} {print $ 0}’ dennis_ritchie.txt

Ketahuilah bahwa aturan BEGIN memiliki serangkaian tindakan pribadi yang terlampir di dalam rangkaian kurawal keriting pribadinya ({}).

Kami dapat menggunakan metode identik ini dengan perintah yang kami gunakan sebelumnya untuk mem-pipe output dari siapa yang menjadi awk. Untuk mengambil tindakan, kami mengurutkan berikutnya:

siapa | awk ‘BEGIN {print “Periode Energi”} {print $ 1, $ 4}’

Masukkan Pemisah Disiplin

Jika Anda ingin awk bekerja dengan konten teks yang tidak menggunakan spasi putih untuk bidang yang terpisah, penting untuk memberi tahu karakter mana yang digunakan konten teks sebagai sphere separator. Sebagai contoh, file / dan banyak lainnya / file passwd menggunakan tanda titik dua (:) untuk memisahkan bidang.

Kami akan menggunakan file itu dan -F (string pemisah) pilihan untuk menginformasikan awk untuk menggunakan titik dua (:) sebagai pemisah. Kami mengurutkan berikutnya untuk menginformasikan awk untuk mencetak judul akun konsumen dan folder rumah:

awk -F: ‘{print $ 1, $ 6}’ / dan banyak lainnya / passwd

Outputnya mencakup judul akun konsumen (atau perangkat lunak atau judul daemon) dan folder rumah (atau penempatan aplikasi).

Termasuk Pola

Jika yang kami khawatirkan adalah akun konsumen umum, kami akan mewujudkan sampel dengan gerakan cetak kami untuk menyaring semua entri yang berbeda. Karena nomor ID Pengguna sama dengan, atau lebih baik dari, 1.000, kami akan mendasarkan filter kami pada info itu.

Kami mengurutkan berikutnya untuk menjalankan gerakan cetak kami semata-mata ketika subjek ketiga ($ 3) memasukkan harga 1.000 atau lebih baik:

awk -F: ‘$ 3> = 1000 {print $ 1, $ 6}’ / dan banyak lainnya / passwd

Sampel harus segera mendahului gerakan yang terkait dengannya.

Kami dapat menggunakan aturan BEGIN untuk menawarkan judul untuk laporan kecil kami. Kami mengurutkan berikutnya, menggunakan notasi (\ n) untuk menyisipkan karakter baris baru ke dalam string judul:

awk -F: ‘BEGIN {print “Akun Orang \ n ————-“} $ 3> = 1000 {print $ 1, $ 6}’ / dan banyak lainnya / passwd

Pola adalah ekspresi reguler lengkap, biasanya merupakan salah satu dari banyak kemuliaan awk.

Katakanlah kami ingin melihat pengidentifikasi unik universal (UUID) dari metode file yang dipasang. Jika kita mencari melalui / dan banyak lainnya / file fstab untuk kemunculan string “UUID,” itu harus mengembalikan info itu untuk kita.

Kami menggunakan sampel pencarian “/ UUID /” dalam perintah kami:

awk ‘/ UUID / {print $ 0}’ / dan banyak lainnya / fstab

Ia menemukan semua kemunculan “UUID” dan mencetak jenis-jenis ini. Kami benar-benar akan mendapatkan hasil akhir yang identik tanpa gerakan cetak sebagai hasil dari gerakan default mencetak semua baris konten teks. Untuk keterbacaan, meskipun, biasanya membantu untuk lebih spesifik. Saat Anda melihat melalui skrip atau file riwayat lama Anda, Anda akan senang Anda meninggalkan petunjuk untuk diri Anda sendiri.

Baris utama yang ditemukan adalah baris komentar, dan meskipun string “UUID” ada di jalurnya, namun awk tetap menemukannya. Kami dapat mengubah ekspresi umum dan menginformasikan awk ke arah semata-mata strain yang dimulai dengan “UUID.” Untuk mengambil tindakan, kami mengurutkan berikutnya yang menggabungkan awal token garis (^):

awk ‘/ ^ UUID / {print $ 0}’ / dan banyak lainnya / fstab

Itu lebih tinggi! Sekarang, kami hanya melihat petunjuk arah nyata. Untuk mempersempit hasil tambahan, kami mengurutkan berikutnya dan melarang pertunjukan ke subjek utama:

awk ‘/ ^ UUID / {print $ 1}’ / dan banyak lainnya / fstab

Jika kami memiliki sejumlah metode file yang dipasang pada mesin ini, kami akan mendapatkan meja rapi dari UUID mereka.

Fitur Dibangun-Dalam

awk memiliki banyak fungsi yang dapat Anda panggil dan gunakan dalam program Anda sendiri, masing-masing dari baris perintah dan dalam skrip. Jika Anda melakukan penggalian, Anda akan menemukannya sangat bermanfaat.

Untuk mengungkapkan metode terakhir untuk memberi nama suatu operasi, kami akan melihat beberapa yang numerik. Sebagai contoh, selanjutnya mencetak akar kuadrat dari 625:

awk ‘BEGIN {print sqrt (625)}’

Perintah ini mencetak arctangent dari 0 (nol) dan -1 (yang terjadi adalah tetap matematis, pi):

awk ‘BEGIN {print atan2 (0, -1)}’

Dalam perintah berikut, kami memodifikasi hasil atan2 () beroperasi lebih awal dari yang kami cetak:

awk ‘BEGIN {print atan2 (0, -1) * 100}’

Fitur dapat menerima ekspresi sebagai parameter. Misalnya, di sini ada pendekatan berbelit-belit untuk meminta akar kuadrat dari 25:

awk ‘BEGIN {print sqrt ((2 + 3) * 5)}’

Script awk

Jika baris perintah Anda menjadi canggih, jika tidak, Anda mengembangkan rutin yang Anda tahu akan Anda gunakan sekali lagi, Anda mungkin dapat mengubah perintah awk langsung menjadi skrip.

Dalam skrip instan kami, kami akan melakukan semua hal berikut:

Menginformasikan shell yang dapat dieksekusi untuk menggunakan untuk menjalankan skrip.
Masukkan awk untuk menggunakan variabel pemisah subjek FS untuk belajar memasukkan konten tekstual dengan bidang yang dipisahkan oleh titik dua (:).
Gunakan pemisah subjek keluaran OFS untuk menginformasikan awk untuk menggunakan titik dua (:) untuk memisahkan bidang dalam output.
Atur penghitung ke 0 (nol).
Setel subjek kedua dari setiap baris konten teks ke nilai bersih (itu selalu “x,” jadi kami tidak harus melihatnya).
Cetak jalan dengan subjek kedua yang dimodifikasi.
Tambahkan konter.
Cetak nilai penghitung.

Skrip kami terbukti di bawah.

Aturan BEGIN melakukan langkah-langkah persiapan, sedangkan aturan END menunjukkan nilai penghitung. Aturan tengah (yang tidak memiliki judul, atau sampel sehingga cocok dengan setiap baris) memodifikasi subjek kedua, mencetak jalan, dan menambah penghitung.

Baris utama skrip memberitahu shell wh