Pendahuluan
gawk
perintah adalah versi GNU dari awk. Gawk adalah alat pemrosesan teks dan manipulasi data yang kuat dengan banyak fitur dan kegunaan praktis.
Panduan ini akan mengajari Anda cara menggunakan gawk
Linux perintah dengan contoh.
Prasyarat
- Sistem yang menjalankan Linux.
- Akses ke terminal.
- Berkas teks. Tutorial ini menggunakan file orang sebagai contoh.
melihat Sintaks Perintah Linux
Dasar gawk
sintaks terlihat seperti ini:
gawk [options] [actions/filters] input_file
Perintah tidak dapat dijalankan tanpa argumen apa pun. Opsi ini tidak wajib, tetapi untuk gawk
untuk menghasilkan output, setidaknya satu tindakan harus ditetapkan. Tindakan dan filter adalah subperintah dan kriteria pemilihan berbeda yang mengaktifkan gawk
untuk memanipulasi data dari file input.
Catatan :Bungkus opsi dan tindakan dalam tanda kutip tunggal.
Opsi melongo
gawk
command adalah alat serbaguna berkat banyak argumennya. Dengan gawk
menjadi implementasi GNU dari awk
, panjang, opsi gaya GNU tersedia. Setiap opsi panjang memiliki opsi pendek yang sesuai.
Opsi umum disajikan di bawah ini:
Opsi | Deskripsi |
---|---|
-f program-file , --file program-file | Membaca perintah dari file, yang berfungsi sebagai skrip, bukan argumen pertama di terminal. |
-F fs , --field-separator fs | Menggunakan variabel standar fs sebagai pemisah kolom input. |
-v var=val , --assign var=val | Menetapkan nilai ke variabel sebelum menjalankan skrip. |
-b , --characters-as-bytes | Memperlakukan semua data sebagai karakter bita tunggal. |
-c , --traditional | Mengeksekusi gawk dalam mode kompatibilitas. |
-C , --copyright | Menampilkan pesan Hak Cipta GNU. |
-d[file] , --dump-variables[=file] | Menampilkan daftar variabel, tipenya, dan nilainya. |
-e program-text , --source program-text | Memungkinkan pencampuran fungsi perpustakaan dan kode sumber. |
-E file , --exec file | Menonaktifkan penetapan variabel terminal. |
-L [value] , --lint[=value] | Mencetak pesan peringatan tentang kode yang tidak portabel ke implementasi AWK lainnya. |
-S , --sandbox | Menjalankan gawk dalam mode kotak pasir. |
Variabel Bawaan melongo
gawk
command menawarkan beberapa variabel bawaan yang digunakan untuk menyimpan dan menambah nilai pada perintah. Variabel dimanipulasi dari terminal dan hanya mempengaruhi program ketika pengguna memberikan nilai kepada mereka. Beberapa gawk
important penting variabel bawaan adalah:
Variabel | Deskripsi |
---|---|
ARGC | Menampilkan jumlah argumen terminal. |
ARGIND | Menampilkan indeks file ARGV. |
ARGV | Menyajikan array argumen terminal. |
ERRNO | Berisi string yang menjelaskan kesalahan sistem. |
FIELDWIDTHS | Menampilkan daftar lebar bidang yang dipisahkan spasi. |
FILENAME | Mencetak nama file input. |
FNR | Menampilkan nomor catatan masukan. |
FS | Mewakili pemisah kolom input. |
IGNORECASE | Mengaktifkan atau menonaktifkan penelusuran peka huruf besar-kecil. |
NF | Mencetak jumlah kolom file input. |
NR | Mencetak jumlah baris file saat ini. |
OFS | Menampilkan pemisah bidang keluaran. |
ORS | Menampilkan pemisah catatan keluaran. |
RS | Mencetak pemisah catatan masukan. |
RSTART | Mewakili indeks karakter pertama yang cocok. |
RLENGTH | Mewakili panjang string yang cocok. |
Contoh melongo
Penggunaan gawk
pencocokan pola dan fungsi pemrosesan bahasa sangat luas. Artikel ini bertujuan untuk memberikan contoh praktis di mana pengguna belajar menggunakan utilitas gawk.
Penting: gawk
perintah peka huruf besar-kecil. Gunakan IGNORECASE
variabel untuk mengabaikan kasus.
Cetak File
Secara default, gawk
dengan print
argumen menampilkan setiap baris dari file yang ditentukan. Misalnya, menjalankan perintah cat pada orang file teks mencetak yang berikut:
gawk
perintah menampilkan hasil yang sama:
gawk '{print}' people
Cetak Kolom
Dalam file teks, spasi biasanya digunakan sebagai pembatas kolom. orang file terdiri dari empat kolom:
- Bilangan urut.
- Nama depan.
- Nama belakang.
- Tahun lahir.
Gunakan gawk
untuk hanya menampilkan kolom tertentu di terminal. Misalnya:
gawk '{print $2}' people
Perintah hanya mencetak kolom kedua. Untuk mencetak beberapa kolom, seperti kolom satu (nomor urut) dan kolom dua (nama depan), jalankan:
gawk '{print $1, $2}' people
gawk
perintah juga berfungsi tanpa koma di antara $1
dan $2
. Namun, tidak ada spasi antar kolom dalam output:
gawk '{print $1 $2}' people
Filter Kolom
gawk
perintah menawarkan opsi penyaringan tambahan. Misalnya, garis cetak yang berisi huruf kapital O dengan:
gawk '/O/ {print}' people
Untuk menampilkan hanya baris yang berisi huruf O atau A , gunakan perpipaan:
gawk '/O|A/ {print}' people
Perintah mencetak baris apa pun yang menyertakan kata dengan huruf kapital O atau A . Di sisi lain, gunakan logika DAN (&&
) untuk menampilkan baris termasuk keduanya O dan tahun 1995 :
gawk '/O/ && /1995/' people
Filter bekerja dengan angka juga. Misalnya, hanya tampilkan orang yang lahir pada tahun 1990-an dengan:
gawk '/199*/ {print}' people
Output hanya menampilkan baris di mana kolom keempat menyertakan nilai 199 .
Sesuaikan output lebih banyak lagi dengan menggabungkan opsi yang disebutkan sebelumnya. Misalnya, hanya cetak nama depan dan belakang orang yang lahir di 1995 atau 2003 dengan:
gawk '/1995|2003/ {print $2, $3}' people
Perintah mencetak kolom dua dan tiga seperti yang dinyatakan dalam {print $2, $3}
bagian. Keluaran hanya menampilkan baris yang berisi angka 1995 dan 2003 , meskipun kolom yang berisi angka-angka tersebut disembunyikan.
gawk
perintah juga memungkinkan pengguna mencetak semuanya kecuali untuk baris yang berisi string tertentu dengan logika TIDAK (!
). Misalnya, hilangkan baris yang berisi string 19 pada keluaran:
gawk '!/19/' people
Tambahkan Nomor Baris
orang file menyertakan nomor baris di kolom pertama. Jika pengguna mengerjakan file tanpa nomor baris, gawk
menyajikan opsi untuk menambahkannya.
Misalnya, manusia file tidak menyertakan nomor urut apa pun:
Untuk menambahkan nomor baris, jalankan gawk
dengan FNR
dan next
:
gawk '{ print FNR, $0; next}' humans
Perintah menambahkan nomor baris sebelum setiap baris. Hasil yang sama dicapai dengan NR
variabel:
gawk '{print NR, $0}' mobile.txt
Temukan Hitungan Baris
Untuk menghitung jumlah baris dalam file, gunakan END
pernyataan dan NR
variabel dengan gawk
:
gawk 'END { print NR }' people
Perintah membaca setiap baris. Sekali gawk
mencapai END
, ia mencetak nilai NR
- yang berisi jumlah total baris. Menjalankan perintah yang sama tanpa END
pernyataan hanya mencetak nilai NR
- jumlah baris:
Filter Garis Berdasarkan Panjangnya
Gunakan opsi perintah berikut untuk mencetak hanya baris yang lebih panjang dari 20 karakter:
gawk 'length>20' people
Ini juga berfungsi dengan banyak argumen. Misalnya, tampilkan garis yang lebih panjang dari 17 tapi lebih pendek dari 20 karakter:
gawk 'length<20 && length>17' people
Untuk menampilkan garis yang panjangnya tepat 20 karakter, jalankan:
gawk 'length==20' people
Info Cetak Berdasarkan Ketentuan
gawk
perintah memungkinkan untuk penggunaan pernyataan if-else. Misalnya, cara lain untuk memfilter hanya orang yang lahir setelah 1999 adalah dengan pernyataan if sederhana:
gawk '{ if ($4>1999) print }' people
Pernyataan if menetapkan kondisi bahwa entri di kolom empat harus lebih besar dari 1999 . Output hanya menampilkan entri yang memenuhi kondisi. Perluas perintah menjadi pernyataan if-else untuk mencetak baris yang tidak memenuhi kondisi aslinya.
gawk '{if ($4>1999) print $0," ==>00s"; else print $0, "==>90s"}' people
Perintah tersebut meliputi:
- Pernyataan if. Jika kondisi terpenuhi,
gawk
menambahkan string "==>90s " ke jalur keluaran. - Pernyataan lain. Jika baris tidak memenuhi ketentuan,
gawk
masih mencetak baris itu di output, menambahkan "==>00s " string ke output.
Tambahkan Tajuk
Dengan cara yang sama di mana END
pernyataan memungkinkan pengguna untuk memodifikasi output di akhir file, BEGIN
pernyataan memformat data di awal.
Saat digunakan dengan awk
, BEGIN
bagian selalu dieksekusi terlebih dahulu. Setelah itu, awk
mengeksekusi baris yang tersisa. Salah satu cara untuk menggunakan BEGIN
pernyataan adalah menambahkan header ke output.
Jalankan perintah berikut untuk menambahkan bagian di atas awk
keluaran:
gawk 'BEGIN {print "No/First&Last Name/Year of Birth"} {print $0}' people
Temukan Panjang Garis Terpanjang
Gabungkan argumen sebelumnya dengan jika dan END
pernyataan untuk menemukan garis terpanjang di orang berkas:
gawk '{ if (length($0) > max) max = length($0) } END { print max }' people
Menemukan Jumlah Kolom
gawk
perintah juga memungkinkan pengguna untuk menampilkan jumlah bidang dengan NF
variabel. Cara paling sederhana untuk menampilkan jumlah bidang mencetak keluaran yang sulit dibaca:
gawk '{print NF}' people
Perintah menampilkan jumlah bidang per baris tanpa info tambahan. Untuk menyesuaikan output dan membuatnya lebih mudah dibaca manusia, sesuaikan perintah awal:
gawk '{print NR, "-->", NF}' people
Perintah sekarang termasuk:
NR
variabel yang menambahkan nomor baris ke setiap baris keluaran.-->
string yang memisahkan nomor baris dari nomor bidang.
Cara lain untuk menampilkan nomor baris dan bidang di orang file untuk mencetak kolom dengan NF
. Perhatikan bahwa orang file termasuk nomor urut di kolom satu. Oleh karena itu NR
variabel dihilangkan:
gawk '{print $0, "-->", NF}' people
Terakhir, untuk mencetak jumlah total bidang, jalankan:
gawk '{num_fields = num_fields + NF} END {print num_fields}' people
File tersebut memang memiliki sepuluh baris dan empat kolom. Oleh karena itu, outputnya benar.
Kesimpulan
Setelah melalui tutorial ini, Anda tahu cara menggunakan gawk
untuk pemrosesan teks dan manipulasi data tingkat lanjut.
Pertimbangkan juga untuk menggunakan grep, alat Linux yang kuat untuk mencari string, kata, dan pola.