Banyak alat utilitas yang ada di sistem operasi Linux untuk mencari dan menghasilkan laporan dari data teks atau file. Pengguna dapat dengan mudah melakukan berbagai jenis tugas pencarian, penggantian, dan pembuatan laporan dengan menggunakan perintah awk, grep, dan sed. awk bukan hanya sebuah perintah. Ini adalah bahasa skrip yang dapat digunakan dari terminal dan file awk. Ini mendukung variabel, pernyataan bersyarat, array, loop dll seperti bahasa scripting lainnya. Itu dapat membaca konten file apa pun baris demi baris dan memisahkan bidang atau kolom berdasarkan pembatas tertentu. Ini juga mendukung ekspresi reguler untuk mencari string tertentu dalam konten teks atau file dan mengambil tindakan jika ditemukan kecocokan. Bagaimana Anda dapat menggunakan perintah dan skrip awk ditunjukkan dalam tutorial ini dengan menggunakan 20 contoh yang berguna.
Isi:
- awk dengan printf
- awk untuk membagi ruang putih
- awk untuk mengubah pembatas
- awk dengan data yang dibatasi tab
- awk dengan data csv
- awk regex
- regex peka huruf besar-kecil awk
- awk dengan variabel nf (jumlah bidang)
- fungsi awk gensub ()
- awk dengan fungsi Rand()
- fungsi yang ditentukan pengguna awk
- awk jika
- variabel awk
- array awk
- lingkaran awk
- awk untuk mencetak kolom pertama
- awk untuk mencetak kolom terakhir
- awk dengan grep
- awk dengan file skrip bash
- awk dengan sed
Menggunakan awk dengan printf
cetakf() fungsi digunakan untuk memformat output apa pun di sebagian besar bahasa pemrograman. Fungsi ini dapat digunakan dengan awk perintah untuk menghasilkan berbagai jenis output yang diformat. perintah awk terutama digunakan untuk file teks apa pun. Buat file teks bernama karyawan.txt dengan konten yang diberikan di bawah ini di mana bidang dipisahkan oleh tab (' ').
karyawan.txt
1001 John sena 40000
1002 Jafar Iqbal 60000
1003 Meher Nigar 30000
1004 Jonny Hati 70000
Perintah awk berikut akan membaca data dari karyawan.txt file baris demi baris dan cetak yang pertama diajukan setelah memformat. Di Sini, %10s berarti outputnya akan sepanjang 10 karakter. Jika nilai output kurang dari 10 karakter maka spasi akan ditambahkan di depan nilai.
$ awk'{ printf '%10s ', $1}'karyawan.txt
Keluaran:
awk untuk membagi ruang putih
Pemisah kata atau bidang default untuk memisahkan teks apa pun adalah spasi putih. perintah awk dapat mengambil nilai teks sebagai input dengan berbagai cara. Teks input dilewatkan dari dibuang perintah pada contoh berikut. Teks, ' Saya suka pemrograman ' akan dibagi dengan pemisah default, ruang angkasa , dan kata ketiga akan dicetak sebagai output.
$dibuang 'Saya suka pemrograman' | awk '{ cetak $3 }'Keluaran:
awk untuk mengubah pembatas
Perintah awk dapat digunakan untuk mengubah pembatas untuk konten file apa pun. Misalkan, Anda memiliki file teks bernama telepon.txt dengan konten berikut di mana ':' digunakan sebagai pemisah bidang konten file.
telepon.txt
+123: 334: 889: 778+880: 1855: 456: 907
+9: 7777: 38644: 808
Jalankan perintah awk berikut untuk mengubah pembatas, ':' oleh '-' dengan isi file, telepon.txt .
$ cat phone.txt$ awk '$1=$1' FS=':' OFS='-' phone.txt
Keluaran:
awk dengan data yang dibatasi tab
Perintah awk memiliki banyak variabel bawaan yang digunakan untuk membaca teks dengan cara yang berbeda. Dua di antaranya adalah FS dan OFS . FS adalah pemisah bidang input dan OFS adalah variabel pemisah bidang keluaran. Penggunaan variabel-variabel ini ditunjukkan di bagian ini. Membuat tab file terpisah bernama masukan.txt dengan konten berikut untuk menguji penggunaan FS dan OFS variabel.
Masukan.txt
Bahasa skrip sisi klienBahasa skrip sisi server
Server Basis Data
Server Web
Menggunakan variabel FS dengan tab
Perintah berikut akan membagi setiap baris dari masukan.txt file berdasarkan tab (' ') dan cetak bidang pertama dari setiap baris.
$awk '{ cetak $1 }' FS='T'masukan.txtKeluaran:
Menggunakan variabel OFS dengan tab
Perintah awk berikut akan mencetak: 9th dan 5th bidang 'Ls -l' output perintah dengan pemisah tab setelah mencetak judul kolom Nama dan Ukuran . Di Sini, OFS variabel digunakan untuk memformat output dengan tab.
$ls -NS$ls -NS | awk -v OFS='T' 'BEGIN { printf '%s %s ', 'Name', 'Size'} {cetak $9,$5}'
Keluaran:
awk dengan data CSV
Konten file CSV apa pun dapat diuraikan dalam berbagai cara dengan menggunakan perintah awk. Buat file CSV bernama ' pelanggan.csv ' dengan konten berikut untuk menerapkan perintah awk.
pelanggan.txt
Id, Nama, email, telepon1, Sophia, [dilindungi email] , (862) 478-7263
2, Amelia, [dilindungi email] , (530) 764-8000
3, Emma, [dilindungi email] , (542) 986-2390
Membaca satu bidang file CSV
'-F' option digunakan dengan perintah awk untuk mengatur pembatas untuk memisahkan setiap baris file. Perintah awk berikut akan mencetak: nama bidang pelanggan.csv mengajukan.
$kucingpelanggan.csv$awk -F ',' '{cetak $2}'pelanggan.csv
Keluaran:
Membaca beberapa bidang dengan menggabungkan dengan teks lain
Perintah berikut akan mencetak tiga bidang: pelanggan.csv dengan menggabungkan teks judul, Nama, Email, dan Telepon . Baris pertama dari pelanggan.csv file berisi judul setiap bidang. TIDAK variabel berisi nomor baris file saat perintah awk mem-parsing file. Dalam contoh ini, NR variabel digunakan untuk menghilangkan baris pertama file. Output akan menunjukkan 2dan, 3rddan 4thbidang semua baris kecuali baris pertama.
$awk -F ',' 'NR>1 {cetak 'Nama:' $2 ', Email:' $3 ', Telepon:' $4}'pelanggan.csvKeluaran:
Membaca file CSV menggunakan skrip awk
skrip awk dapat dieksekusi dengan menjalankan file awk. Bagaimana Anda dapat membuat file awk dan menjalankan file tersebut ditunjukkan dalam contoh ini. Buat file bernama awkcsv.awk dengan kode berikut. MULAI kata kunci digunakan dalam skrip untuk menginformasikan perintah awk untuk mengeksekusi skrip MULAI bagian terlebih dahulu sebelum melaksanakan tugas lainnya. Di sini, pemisah bidang ( FS ) digunakan untuk mendefinisikan pemisah pemisah dan 2dandan 1NSbidang akan dicetak sesuai dengan format yang digunakan dalam fungsi printf().
awkcsv.awkMULAI{FS= ','} { printf '% 5s (%s) ',$2,$1}
Lari awkcsv.awk file dengan isi pelanggan.csv file dengan perintah berikut.
$awk -Fawkcsv.awk pelanggan.csvKeluaran:
awk regex
Ekspresi reguler adalah pola yang digunakan untuk mencari string apa pun dalam teks. Berbagai jenis tugas pencarian dan penggantian yang rumit dapat dilakukan dengan sangat mudah dengan menggunakan ekspresi reguler. Beberapa penggunaan sederhana dari ekspresi reguler dengan perintah awk ditampilkan di bagian ini.
Karakter yang cocokmengaturPerintah berikut akan cocok dengan kata Bodoh atau bodoh atau Dingin dengan string input dan cetak jika kata ditemukan. Di Sini, Boneka tidak akan cocok dan tidak dicetak.
$printf 'Menipu Dingin Boneka bo' | awk '/[FbC]ol/'Keluaran:
Mencari string di awal baris
'^' simbol digunakan dalam ekspresi reguler untuk mencari pola apa pun di awal baris. ' Linux' kata akan dicari di awal setiap baris teks dalam contoh berikut. Di sini, dua baris dimulai dengan teks, 'Linux ' dan dua baris itu akan ditampilkan di output.
$dibuang -Dan 'Linux gratis untuk digunakan Ini adalah perangkat lunak sumber terbuka LinuxHint adalahsitus blog populer' | awk '/^Linux/'
Keluaran:
Mencari string di akhir baris
'$' simbol digunakan dalam ekspresi reguler untuk mencari pola apa pun di akhir setiap baris teks. ' Naskah ' kata dicari dalam contoh berikut. Di sini, dua baris berisi kata, Naskah di akhir baris.
$dibuang -Dan 'Skrip PHP JavaScript Pemrograman Visual' | awk '/Skrip$/'Keluaran:
Mencari dengan menghilangkan set karakter tertentu
'^' simbol menunjukkan awal teks ketika digunakan di depan pola string apa pun (‘/ ^… /’) atau sebelum set karakter apa pun dideklarasikan oleh ^ […] . jika '^' simbol digunakan di dalam tanda kurung ketiga, [^…] maka set karakter yang ditentukan di dalam tanda kurung akan dihilangkan pada saat pencarian. Perintah berikut akan mencari kata apa pun yang tidak dimulai dengan 'F' tapi diakhiri dengan ' ool '. Dingin dan bool akan dicetak sesuai dengan pola dan data teks.
$ printf 'Menipu Dingin Boneka bo' |awk'/ [^ F] ol /'Keluaran:
regex peka huruf besar-kecil awk
Secara default, ekspresi reguler melakukan pencarian peka huruf besar-kecil saat mencari pola apa pun dalam string. Pencarian case-insensitive dapat dilakukan dengan perintah awk dengan ekspresi reguler. Dalam contoh berikut, lebih rendah() Fungsi ini digunakan untuk melakukan pencarian case-insensitive. Di sini, kata pertama dari setiap baris teks input akan diubah menjadi huruf kecil dengan menggunakan lebih rendah() berfungsi dan cocok dengan pola ekspresi reguler. puncak() fungsi juga dapat digunakan untuk tujuan ini, dalam hal ini, pola harus ditentukan oleh semua huruf kapital. Teks yang didefinisikan dalam contoh berikut berisi kata pencarian, 'Web ' dalam dua baris yang akan dicetak sebagai output.
$dibuang -Dan 'Desain web pengembangan web Kerangka' | awk 'tolower($0) ~ /^web/;'Keluaran:
awk dengan variabel NF (jumlah bidang)
NF adalah variabel bawaan dari perintah awk yang digunakan untuk menghitung jumlah total bidang di setiap baris teks input. Buat file teks apa pun dengan banyak baris dan banyak kata. masukan.txt file digunakan di sini yang dibuat pada contoh sebelumnya.
Menggunakan NF dari baris perintah
Di sini, perintah pertama digunakan untuk menampilkan konten masukan.txt file dan perintah kedua digunakan untuk menunjukkan jumlah total bidang di setiap baris file menggunakan NF variabel.
$ masukan kucing.txt$ awk '{print NF}' input.txt
Keluaran:
Menggunakan NF dalam file awk
Buat file awk bernama count.awk dengan skrip yang diberikan di bawah ini. Ketika skrip ini akan dieksekusi dengan data teks apa pun maka setiap konten baris dengan total bidang akan dicetak sebagai output.
count.awk
{cetak $0}{mencetak'[Total bidang:'NF']'}
Jalankan skrip dengan perintah berikut.
$awk -Fcount.awk input.txtKeluaran:
fungsi awk gensub ()
getsub() adalah fungsi substitusi yang digunakan untuk mencari string berdasarkan pembatas tertentu atau pola ekspresi reguler. Fungsi ini didefinisikan dalam 'melongo' paket yang tidak diinstal secara default. Sintaks untuk fungsi ini diberikan di bawah ini. Parameter pertama berisi pola ekspresi reguler atau pembatas pencarian, parameter Kedua berisi teks pengganti, parameter ketiga menunjukkan bagaimana pencarian akan dilakukan dan parameter terakhir berisi teks di mana fungsi ini akan diterapkan.
Sintaksis:
gensub(regexp, penggantian, bagaimana[, sasaran])Jalankan perintah berikut untuk menginstal melongo paket untuk menggunakan getsub() fungsi dengan perintah awk.
$ sudo apt-get install gawkBuat file teks bernama ' info penjualan.txt ' dengan konten berikut untuk mempraktikkan contoh ini. Di sini, bidang dipisahkan oleh tab.
info penjualan.txt
700000 saya800000 Anda
Rab 750000
Kumpulkan 200000
Jum 430000
Sab 820000
Jalankan perintah berikut untuk membaca bidang numerik dari info penjualan.txt file dan cetak total semua jumlah penjualan. Di sini, parameter ketiga, 'G' menunjukkan pencarian global. Itu berarti pola akan dicari di seluruh isi file.
$awk '{ x=gensub(' ','','G',$2); printf x '+' } SELESAI{ print 0 }'info penjualan.txt| SM -NSKeluaran:
awk dengan fungsi Rand()
baris() fungsi digunakan untuk menghasilkan bilangan acak yang lebih besar dari 0 dan kurang dari 1. Jadi, itu akan selalu menghasilkan bilangan pecahan kurang dari 1. Perintah berikut akan menghasilkan bilangan acak pecahan dan mengalikan nilainya dengan 10 untuk mendapatkan bilangan lebih dari 1. Angka pecahan dengan dua digit setelah titik desimal akan dicetak untuk menerapkan fungsi printf(). Jika Anda menjalankan perintah berikut beberapa kali maka Anda akan mendapatkan output yang berbeda setiap kali.
$awk 'BEGIN {printf 'Nomor adalah =%.2f ' , rand()*10}'Keluaran:
fungsi yang ditentukan pengguna awk
Semua fungsi yang digunakan dalam contoh sebelumnya adalah fungsi bawaan. Tetapi Anda dapat mendeklarasikan fungsi yang ditentukan pengguna dalam skrip awk Anda untuk melakukan tugas tertentu. Misalkan, Anda ingin membuat fungsi kustom untuk menghitung luas persegi panjang. Untuk melakukan tugas ini, buat file bernama ' area.awk ' dengan skrip berikut. Dalam contoh ini, fungsi yang ditentukan pengguna bernama daerah() dideklarasikan dalam skrip yang menghitung area berdasarkan parameter input dan mengembalikan nilai area. getline perintah digunakan di sini untuk mengambil input dari pengguna.
area.awk
# Hitung luasfungsidaerah(tinggi,lebar){
kembalitinggi*lebar
}
# Mulai eksekusi
MULAI{
mencetak'Masukkan nilai tinggi:'
getline h< '-'
mencetak'Masukkan nilai lebar:'
getline w< '-'
mencetak'Luas = 'daerah(H,di dalam)
}
Jalankan skrip.
$awk -Farea.awkKeluaran:
awk kalo contohnya
awk mendukung pernyataan bersyarat seperti bahasa pemrograman standar lainnya. Tiga jenis pernyataan if ditampilkan di bagian ini dengan menggunakan tiga contoh. Buat file teks bernama item.txt dengan konten berikut.
item.txt
HDD Samsung $100Mouse A4Tech
Printer HP $200
Contoh sederhana jika :
dia mengikuti perintah akan membaca konten item.txt file dan periksa 3rd nilai bidang di setiap baris. Jika nilainya kosong maka akan mencetak pesan kesalahan dengan nomor baris.
$awk '{ if ($3 == '') print 'Bidang harga tidak ada di baris ' NR }'item.txtKeluaran:
contoh if-else:
Perintah berikut akan mencetak harga barang jika 3rdbidang ada di baris, jika tidak, itu akan mencetak pesan kesalahan.
$ awk'{ if ($3 == '') print 'Bidang harga tidak ada'lain cetak 'harga barang adalah ' $3 }'item.txt
Keluaran:
contoh if-else-if:
Ketika perintah berikut akan dijalankan dari terminal maka itu akan mengambil input dari pengguna. Nilai input akan dibandingkan dengan masing-masing kondisi if sampai kondisi benar. Jika kondisi apapun menjadi benar maka akan mencetak nilai yang sesuai. Jika nilai input tidak sesuai dengan kondisi apapun maka akan mencetak gagal.
$awk 'BEGIN { print 'Masukkan tanda:'tanda getline<'-'
jika (tandai >= 90) cetak 'A+'
else if( tanda >= 80) cetak 'A'
else if( tanda >= 70) cetak 'B+'
lain cetak 'Gagal' }'
Keluaran:
variabel awk
Deklarasi variabel awk mirip dengan deklarasi variabel shell. Ada perbedaan dalam membaca nilai variabel. Simbol '$' digunakan dengan nama variabel untuk variabel shell untuk membaca nilainya. Tetapi tidak perlu menggunakan '$' dengan variabel awk untuk membaca nilainya.
Menggunakan variabel sederhana:
Perintah berikut akan mendeklarasikan variabel bernama 'lokasi' dan nilai string diberikan ke variabel itu. Nilai variabel dicetak dalam pernyataan berikutnya.
$awk 'MULAI{ situs='LinuxHint.com'; situs cetak}'Keluaran:
Menggunakan variabel untuk mengambil data dari file
Perintah berikut akan mencari kata 'Pencetak' dalam file item.txt . Jika ada baris file yang dimulai dengan 'Pencetak ' maka itu akan menyimpan nilai 1NS , 2dan dan 3rd bidang menjadi tiga variabel. nama dan harga variabel akan dicetak.
$ awk'/Printer/ { nama=$1;merek=$2;harga=$3;print 'nama barang=' nama;cetak 'harga barang=' harga }'item.txt
Keluaran:
array awk
Array numerik dan array terkait dapat digunakan dalam awk. Deklarasi variabel array dalam awk sama dengan bahasa pemrograman lainnya. Beberapa penggunaan array diperlihatkan di bagian ini.
Array Asosiatif:
Indeks array akan berupa string apa pun untuk array asosiatif. Dalam contoh ini, array asosiatif dari tiga elemen dideklarasikan dan dicetak.
$awk 'MULAI {books['Desain Web'] = 'Belajar HTML 5';
books['Pemrograman Web'] = 'PHP dan MySQL'
books['PHP Framework']='Mempelajari Laravel 5'
printf '%s %s %s ', books['Web Design'],books['Web Programming'],
buku['Kerangka PHP'] }'
Keluaran:
Array Numerik:
Array numerik dari tiga elemen dideklarasikan dan dicetak dengan memisahkan tab.
$ awk'MULAI {angka[0] = 80;
angka[1] = 55;
nomor [2] = 76;
# cetak elemen larik
printf 'Nilai array: %dT%DT%D ', angka[0],angka[1],angka[2]; }'
Keluaran:
lingkaran awk
Tiga jenis loop didukung oleh awk. Penggunaan loop ini ditunjukkan di sini dengan menggunakan tiga contoh.
loop sementara:
while loop yang digunakan dalam perintah berikut akan berulang sebanyak 5 kali dan keluar dari loop untuk pernyataan break.
$ awk 'MULAI { n = 1; sementara (n 5) istirahat; cetak n; n++ } }'Keluaran:
Untuk lingkaran:
Untuk loop yang digunakan dalam perintah awk berikut akan menghitung jumlah dari 1 hingga 10 dan mencetak nilainya.
$awk 'MULAI { jumlah=0; untuk (n = 1; n<= 10; n++) sum=sum+n; print sum }'Keluaran:
Perulangan do while:
perulangan do-while dari perintah berikut akan mencetak semua bilangan genap dari 10 hingga 5.
$awk 'MULAI {penghitung = 10; do { if (counter%2 ==0) print counter; menangkal-- }while (penghitung > 5) }'
Keluaran:
awk untuk mencetak kolom pertama
Kolom pertama dari file apa pun dapat dicetak dengan menggunakan variabel $1 di awk. Tetapi jika nilai kolom pertama berisi beberapa kata maka hanya kata pertama dari kolom pertama yang dicetak. Dengan menggunakan pembatas tertentu, kolom pertama dapat dicetak dengan baik. Buat file teks bernama siswa.txt dengan konten berikut. Di sini, kolom pertama berisi teks dari dua kata.
Siswa.txt
Kaniz Fatema 30thkelompokAbir Hossain 35thkelompok
Yohanes Abraham 40thkelompok
Jalankan perintah awk tanpa pembatas. Bagian pertama dari kolom pertama akan dicetak.
$awk '{cetak $1}'siswa.txtJalankan perintah awk dengan pembatas berikut. Bagian penuh dari kolom pertama akan dicetak.
$awk -F '\ s \ s' '{cetak $1}'siswa.txtKeluaran:
awk untuk mencetak kolom terakhir
$(NF) variabel dapat digunakan untuk mencetak kolom terakhir dari file apa pun. Perintah awk berikut akan mencetak bagian terakhir dan bagian penuh dari kolom terakhir siswa.txt mengajukan.
$awk '{cetak $(NF)}'siswa.txt$awk -F '\ s \ s' '{cetak $(NF)}'siswa.txt
Keluaran:
awk dengan grep
grep adalah perintah lain yang berguna dari Linux untuk mencari konten dalam file berdasarkan ekspresi reguler apa pun. Bagaimana perintah awk dan grep dapat digunakan bersama ditunjukkan dalam contoh berikut. pegangan perintah digunakan untuk mencari informasi id karyawan, ' 1002 ' dari karyawan.txt mengajukan. Output dari perintah grep akan dikirim ke awk sebagai data input. Bonus 5% akan dihitung dan dicetak berdasarkan gaji id karyawan,' 1002' dengan perintah awk.
$kucingkaryawan.txt$pegangan '1002'karyawan.txt| awk -F 'T' '{ print $2 ' akan mendapatkan $' ($3*5)/100 ' bonus'}'
Keluaran:
awk dengan file BASH
Seperti perintah Linux lainnya, perintah awk juga dapat digunakan dalam skrip BASH. Buat file teks bernama pelanggan.txt dengan konten berikut. Setiap baris file ini berisi informasi tentang empat bidang. Ini adalah ID pelanggan, Nama, alamat dan nomor ponsel yang dipisahkan oleh '/ '.
pelanggan.txt
AL4934 / Charles M Brunner / 4838 Beeghley Street, Huntsville, Alabama / 256-671-7942CA5455 / Virginia S Mota / 930 Bassel Street,VALLECITO,California / 415-679-5908
IL4855 / Ann A Neale / 1932 Patterson Fork Road, Chicago, Illinois / 773-550-5107
Buat file bash bernama item_search.bash dengan skrip berikut. Menurut skrip ini, nilai status akan diambil dari pengguna dan dicari di pelanggan.txt file oleh pegangan perintah dan diteruskan ke perintah awk sebagai input. Perintah awk akan membaca 2dan dan 4th bidang setiap baris. Jika nilai input cocok dengan nilai status apa pun dari pelanggan.txt file maka akan mencetak pelanggan nama dan nomor handphone , jika tidak, itu akan mencetak pesan Tidak ada pelanggan yang ditemukan .
item_search.bash
#!/bin/bashdibuang 'Masukkan nama negara bagian:'
Bacanegara
pelanggan=``pegangan '$negara'pelanggan.txt| awk -F '/' '{print 'Nama Pelanggan:' $2, ',
Nomor Ponsel:' $4}'``
jika [ '$pelanggan' !='' ];kemudian
dibuang $pelanggan
lain
dibuang 'Tidak ada pelanggan yang ditemukan'
menjadi
Jalankan perintah berikut untuk menampilkan output.
$kucingpelanggan.txt$pestaitem_search.bash
Keluaran:
awk dengan sed
Alat pencarian lain yang berguna dari Linux adalah sed . Perintah ini dapat digunakan untuk mencari dan mengganti teks dari file apapun. Contoh berikut menunjukkan penggunaan perintah awk dengan sed memerintah. Di sini, perintah sed akan mencari semua nama karyawan dimulai dengan ' J ' dan meneruskan ke perintah awk sebagai input. awk akan mencetak karyawan nama dan Indo setelah memformat.
$kucingkaryawan.txt$sed -n '/J/p'karyawan.txt| awk -F 'T' '{ printf '%s(%s) ', $2, $1 }'
Keluaran:
Kesimpulan:
Anda dapat menggunakan perintah awk untuk membuat berbagai jenis laporan berdasarkan data tabular atau delimited apa pun setelah memfilter data dengan benar. Semoga, Anda akan dapat mempelajari cara kerja perintah awk setelah mempraktikkan contoh yang ditunjukkan dalam tutorial ini.