20 contoh awk
Banyak alat utilitas ada di sistem operasi Linux untuk mencari dan menghasilkan laporan dari data teks atau file. Pengguna dapat dengan mudah melakukan berbagai jenis pencarian, penggantian, dan pembuatan laporan tugas 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 tablimit
- awk dengan data csv
- awk regex
- awk regex peka huruf besar-kecil
- awk dengan variabel nf (jumlah bidang)
- fungsi awk gensub()
- awk dengan fungsi Rand()
- awk fungsi yang ditentukan pengguna
- 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
printf() 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 ('\t').
karyawan.txt
1001 John sena 400001002 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\n” berarti outputnya akan sepanjang 10 karakter. Jika nilai output kurang dari 10 karakter maka spasi akan ditambahkan di depan nilai.
$ awk ' printf "%10s\n", $1 ' karyawan.txtKeluaran:
Pergi ke Konten
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 gema perintah dalam contoh berikut. Teks, 'Saya suka pemrograman' akan dibagi dengan pemisah default, ruang, dan kata ketiga akan dicetak sebagai output.
$ echo 'Saya suka pemrograman' | awk ' cetak $3 'Keluaran:
Pergi ke Konten
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 '-' ke isi file, telepon.txt.
$ telepon kucing.txt$ awk '$1=$1' FS=":" OFS="-" telepon.txt
Keluaran:
Pergi ke Konten
awk dengan data yang dibatasi tablimit
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 memasukkan.txt dengan konten berikut untuk menguji penggunaan FS dan OFS variabel.
Memasukkan.txt
Bahasa skrip sisi klienBahasa skrip sisi server
Database Server
Server Web
Menggunakan variabel FS dengan tab
Perintah berikut akan membagi setiap baris dari memasukkan.txt file berdasarkan tab ('\t') dan cetak bidang pertama dari setiap baris.
$ awk ' print $1 ' FS='\t' masukan.txtKeluaran:
Menggunakan variabel OFS dengan tab
Perintah awk berikut akan mencetak 9ini dan 5ini bidang 'ls -l' output perintah dengan pemisah tab setelah mencetak judul kolom “Nama” dan “Ukuran”. Sini, OFS variabel digunakan untuk memformat output dengan tab.
$ ls -l$ ls -l | awk -v OFS='\t' 'BEGIN printf "%s\t%s\n", "Nama", "Ukuran" cetak $9,$5'
Keluaran:
Pergi ke Konten
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, [email dilindungi], (542) 986-2390
Membaca satu bidang file CSV
'-F' opsi digunakan dengan perintah awk untuk mengatur pembatas untuk memisahkan setiap baris file. Perintah awk berikut akan mencetak nama bidang pelanggan.csv mengajukan.
$ pelanggan kucing.csv$ awk -F "," 'print $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. NR 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, 3rd dan 4ini bidang semua baris kecuali baris pertama.
$ awk -F "," 'NR>1 print "Name:" $2 ", Email:" $3 ", Phone:" $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 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 lain. Di sini, pemisah bidang (FS) digunakan untuk mendefinisikan pemisah pemisah dan 2dan dan 1st bidang akan dicetak sesuai dengan format yang digunakan dalam fungsi printf().
awkcsv.awkMULAI FS = "," printf "%5s(%s)\n", $2,$1
Lari awkcsv.awk file dengan isi pelanggan.csv file dengan perintah berikut.
$ awk -f awkcsv.pelanggan awk.csvKeluaran:
Pergi ke Konten
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.
Set karakter yang cocokPerintah berikut akan cocok dengan kata Bodoh atau bodoh atau Keren dengan string input dan cetak jika kata ditemukan. Sini, Boneka tidak akan cocok dan tidak dicetak.
$ printf "Bodoh\nKeren\nBoneka\nbohong" | 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.
$ echo -e "Linux bebas untuk digunakan\n Ini adalah perangkat lunak sumber terbuka\nLinuxHint 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.
$ echo -e "Skrip PHP\nJavaScript\nPemrograman 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'. Keren dan bool akan dicetak sesuai dengan pola dan data teks.
$ printf "Bodoh\nKeren\nBoneka\nbohong" | awk '/[^F]ol/'Keluaran:
Pergi ke Konten
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 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, polanya harus ditentukan oleh semua huruf kapital. Teks yang didefinisikan dalam contoh berikut berisi kata pencarian, 'web' dalam dua baris yang akan dicetak sebagai output.
$ echo -e "Desain Web\npengembangan web\nKerangka" | awk 'tolower($0) ~ /^web/;'Keluaran:
Pergi ke Konten
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 memasukkan.txt file dan perintah kedua digunakan untuk menunjukkan jumlah total bidang di setiap baris file menggunakan NF variabel.
$ masukan kucing.txt$ awk 'print NF' masukan.txt
Keluaran:
Menggunakan NF dalam file awk
Buat file awk bernama menghitung.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.
menghitung.awk
cetak $0print "[Total bidang:" NF "]"
Jalankan skrip dengan perintah berikut.
$ awk -f hitung.masukan awk.txtKeluaran:
Pergi ke Konten
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 [, target])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
Sen 700000Sel 800000
Rab 750000
Kam 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 polanya akan dicari di seluruh isi file.
$ awk ' x=gensub("\t","","G",$2); printf x "+" END print 0 ' info penjualan.txt | bc -lKeluaran:
Pergi ke Konten
awk dengan fungsi Rand()
rand() fungsi digunakan untuk menghasilkan angka acak apa pun yang lebih besar dari 0 dan kurang dari 1. Jadi, itu akan selalu menghasilkan bilangan pecahan kurang dari 1. Perintah berikut akan menghasilkan angka acak pecahan dan mengalikan nilainya dengan 10 untuk mendapatkan angka 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 =%.2f\n" , rand()*10'Keluaran:
Pergi ke Konten
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 khusus untuk menghitung luas persegi panjang. Untuk melakukan tugas ini, buat file bernama 'daerah.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.
daerah.awk
# Hitung luasarea fungsi (tinggi, lebar)
kembali tinggi * lebar
# Mulai eksekusi
MULAI
print "Masukkan nilai tinggi:"
getline h < "-"
print "Masukkan nilai lebar:"
getline w < "-"
print "Luas = "luas(h,w)
Jalankan skrip.
$ awk -f area.awkKeluaran:
Pergi ke Konten
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 3rd bidang ada di baris, jika tidak, itu akan mencetak pesan kesalahan.
$ awk ' if ($3 == "") print "Bidang harga tidak ada"else print "harga barang adalah " $3 ' barang.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 apa pun menjadi benar maka itu akan mencetak nilai yang sesuai. Jika nilai input tidak sesuai dengan kondisi apa pun maka akan gagal mencetak.
$ 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:
Pergi ke Konten
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 'situs' dan nilai string diberikan ke variabel itu. Nilai variabel dicetak dalam pernyataan berikutnya.
$ awk 'BEGIN site="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 1st, 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;print "harga barang=" harga ' barang.txt
Keluaran:
Pergi ke Konten
array awk
Array numerik dan terkait dapat digunakan dalam awk. Deklarasi variabel array dalam awk sama dengan bahasa pemrograman lain. Beberapa penggunaan array ditunjukkan 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.
$aw 'MULAIbooks["Desain Web"] = "Belajar HTML 5";
books["Pemrograman Web"] = "PHP dan MySQL"
books["Framework PHP"]="Mempelajari Laravel 5"
printf "%s\n%s\n%s\n", books["Desain Web"],buku["Pemrograman Web"],
buku["Kerangka PHP"] '
Keluaran:
Array Numerik:
Array numerik dari tiga elemen dideklarasikan dan dicetak dengan memisahkan tab.
$aw 'MULAIangka[0] = 80;
angka[1] = 55;
nomor [2] = 76;
# cetak elemen larik
printf "Nilai array: %d\t%d\t%d\n", number[0],number[1],number[2]; '
Keluaran:
Pergi ke Konten
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 <= 10) if(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:
loop do-while dari perintah berikut akan mencetak semua angka genap dari 10 hingga 5.
$ awk 'MULAI penghitung = 10; do if (counter%2 ==0) print counter; kontra--while (penghitung > 5) '
Keluaran:
Pergi ke Konten
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 banyak 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 30ini kumpulanAbir Hossain 35ini kumpulan
John Abraham 40ini kumpulan
Jalankan perintah awk tanpa pembatas. Bagian pertama dari kolom pertama akan dicetak.
$ awk siswa 'print $1'.txtJalankan perintah awk dengan pembatas berikut. Bagian penuh dari kolom pertama akan dicetak.
$ awk -F '\\s\\s' 'print $1' siswa.txtKeluaran:
Pergi ke Konten
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 murid-murid.txt mengajukan.
$ awk 'print $(NF)' siswa.txt$ awk -F '\\s\\s' 'print $(NF)' siswa.txt
Keluaran:
Pergi ke Konten
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:. grep perintah digunakan untuk mencari informasi id karyawan, '1002' dari pekerja.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.
$ karyawan kucing.txt$ grep '1002' karyawan.txt | awk -F '\t' ' print $2 " akan mendapatkan $" ($3*5)/100 " bonus"'
Keluaran:
Pergi ke Konten
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.pesta dengan skrip berikut. Menurut skrip ini, nilai status akan diambil dari pengguna dan dicari di pelanggan.txt file oleh grep perintah dan diteruskan ke perintah awk sebagai input. Perintah awk akan membaca 2dan dan 4ini 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.pesta
#!/bin/bashecho "Masukkan nama negara bagian:"
status baca
pelanggan='grep "$state" pelanggan.txt | awk -F "/" 'print "Nama Pelanggan:" $2, ",
Nomor Ponsel:" $4''
jika [ "$pelanggan" != "" ]; kemudian
gema $pelanggan
lain
echo "Tidak ada pelanggan yang ditemukan"
fi
Jalankan perintah berikut untuk menampilkan output.
$ pelanggan kucing.txt$ bash item_search.pesta
Keluaran:
Pergi ke Konten
awk dengan sed
Alat pencarian lain yang berguna dari Linux adalah sed. Perintah ini dapat digunakan untuk mencari dan mengganti teks dari file apa pun. Contoh berikut menunjukkan penggunaan perintah awk dengan sed perintah. 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.
$ karyawan kucing.txt$ sed -n '/J/p' karyawan.txt | awk -F '\t' ' printf "%s(%s)\n", $2, $1 '
Keluaran:
Pergi ke Konten
Kesimpulan:
Anda dapat menggunakan perintah awk untuk membuat berbagai jenis laporan berdasarkan data tabular atau dibatasi apa pun setelah memfilter data dengan benar. Semoga, Anda dapat mempelajari cara kerja perintah awk setelah mempraktikkan contoh yang ditunjukkan dalam tutorial ini this.