GNU/Linux >> Belajar Linux >  >> Linux

Perintah Awk di Linux

AWK adalah salah satu perintah paling kuat di Linux. Anda dapat mengelola data dan membuat laporan menggunakan perintah awk. Hal ini juga memungkinkan kita untuk menggunakan operasi logis, variabel, fungsi cetak dan banyak lagi. AWK adalah singkatan dari "Aho, Weinberger dan Kernighan" dan sebagian besar digunakan untuk pemindaian dan pemrosesan pola. Ini mencari satu atau lebih file untuk melihat apakah mereka berisi baris yang cocok dengan pola yang ditentukan dan kemudian melakukan tindakan terkait. Ia membaca dari file atau dari input dan output standarnya ke output standarnya. Untuk setiap baris, itu cocok dengan pola yang diberikan dalam urutan yang diberikan, jika cocok melakukan tindakan yang sesuai.

Fitur

• Menampilkan file teks sebagai record dan field
• Memiliki variabel, kondisional dan loop
• Memiliki operator aritmatika dan string
• Dapat menghasilkan laporan berformat
• Membaca dan mengedit teks dari string atau file

Dalam tutorial ini, kita akan melihat perintah AWK Linux dengan contoh dan melihat apa yang dapat dilakukannya.

Sintaks Basix dari AWK

Sintaks dasar perintah AWK ditunjukkan di bawah ini:

awk options program input-file

Penjelasan singkat dari setiap opsi ditunjukkan di bawah ini:

• -F fs :Digunakan untuk menentukan pemisah file.
• -f file :Digunakan untuk menentukan file yang berisi skrip awk.
• -v var=value :Digunakan untuk mendeklarasikan sebuah variabel.

Kami akan menggunakan file teks berikut sebagai file input untuk semua contoh dalam artikel ini:

cat > contents.txt

hitesh engineer sales 30000
jayesh director account 25000
vyom manager purchase 20000
bhavesh engineer sales 30000
rajesh directory sales 40000
niraj clerk account 20000
jay peon purchase 23000
deep clerk sales 20000

Sekarang, mari kita periksa isi file bernama 'contents.txt' dengan perintah AWK:

awk '{print}' contents.txt

Ini akan mencetak konten file seperti yang ditunjukkan di bawah ini:

hitesh engineer sales 30000
jayesh director account 25000
vyom manager purchase 20000
bhavesh engineer sales 30000
rajesh directory sales 40000
niraj clerk account 20000
jay peon purchase 23000
deep clerk sales 20000

Pada contoh di atas, tidak ada pola yang diberikan sehingga akan mencetak seluruh file.

Sekarang, cetak semua baris yang cocok dengan pola "penjualan":

awk '/sales/ {print}' contents.txt

Ini akan mencetak semua baris yang mengandung kata "penjualan" seperti yang ditunjukkan di bawah ini:

hitesh engineer sales 30000
bhavesh engineer sales 30000
rajesh directory sales 40000
deep clerk sales 20000

Variabel dalam AWK

AWK hadir dengan beberapa variabel bawaan yang digunakan untuk memecah sebaris teks menjadi kata atau bagian individual yang disebut bidang. Beberapa di antaranya ditunjukkan di bawah ini:

• $0 :Digunakan untuk seluruh baris.
• $1 :Digunakan untuk kolom pertama.
• $2 :Digunakan untuk kolom kedua.
• $n :Digunakan untuk bidang ke-n.
• NR :Digunakan untuk menentukan jumlah total record saat ini.
• NF :Digunakan untuk menentukan jumlah total field dalam record.
• FS :Ini berisi karakter pemisah bidang dan digunakan untuk membagi bidang pada baris input.
• RS :Ini menyimpan karakter pemisah record saat ini.
• OFS :Ini menyimpan pemisah bidang keluaran dan digunakan untuk memisahkan bidang saat Awk mencetaknya.
• ORS :Ini menyimpan pemisah catatan keluaran dan digunakan untuk memisahkan jalur keluaran ketika Awk mencetaknya.

Sekarang, cetak kolom no 1 dan 3 dari file isi.txt menggunakan sintaks berikut:

awk '{print $1,$3}' contents.txt

Anda seharusnya hanya melihat bidang pertama dan ketiga dari file isi.txt:

hitesh sales
jayesh account
vyom purchase
bhavesh sales
rajesh sales
niraj account
jay purchase
deep sales

Anda dapat menggunakan NR dengan perintah AWK untuk mencetak semua baris beserta nomor baris:

awk '{print NR,$0}' contents.txt

Keluaran:

1 hitesh engineer sales 30000
2 jayesh director account 25000
3 vyom manager purchase 20000
4 bhavesh engineer sales 30000
5 rajesh directory sales 40000
6 niraj clerk account 20000
7 jay peon purchase 23000
8 deep clerk sales 20000

Anda dapat menggunakan NF untuk menampilkan bidang terakhir dan $1 untuk menampilkan bidang pertama:

awk '{print $1,$NF}' contents.txt

Ini akan mencetak bidang pertama dan terakhir dari file isi.txt:

hitesh 30000
jayesh 25000
vyom 20000
bhavesh 30000
rajesh 40000
niraj 20000
jay 23000
deep 20000

Untuk mencetak nomor baris dari 2 hingga 5 gunakan variabel NR seperti yang ditunjukkan di bawah ini:

awk 'NR==2, NR==5 {print NR,$0}' contents.txt

Keluaran:

2 jayesh director account 25000
3 vyom manager purchase 20000
4 bhavesh engineer sales 30000
5 rajesh directory sales 40000

Untuk menghitung jumlah baris dalam file isi.txt menggunakan NR:

awk 'END { print NR } ' contents.txt

Anda akan melihat output berikut:

8

Blok MULAI dan AKHIR

Ada juga blok BEGIN dan END opsional yang dapat berisi perintah untuk dieksekusi sebelum dan sesudah pemrosesan file. Blok BEGIN digunakan untuk melakukan tindakan sebelum rekaman diproses sedangkan blok END digunakan untuk melakukan tindakan setelah rekaman diproses.

Sintaks dasar untuk menggunakan blok BEGIN dan END dengan perintah AWK ditunjukkan di bawah ini:

awk 'BEGIN { action; } /search/ { action; } END { action; }' input_file

Anda dapat mencetak informasi tentang bidang yang Anda cetak dengan blok BEGIN dan END.
Contoh berikut akan mencetak pesan sebelum dan sesudah memproses kolom kedua dari setiap record dalam file isi.txt:

awk 'BEGIN { print "Start Process." }; { print $2 }; END { print "End Process." }' contents.txt

Keluaran:

Start Process.
engineer
director
manager
engineer
directory
clerk
peon
clerk
End Process.

Anda juga dapat menggunakan blok BEGIN dan END untuk mengubah data dari file dan mengonversinya menjadi tabel. Contoh berikut akan mengonversi file /etc/passwd menjadi tabel:

awk 'BEGIN { FS=":"; print "User\t\tUID\t\tGID\t\tHome\t\tShell\n--------------"; } {print $1,"\t\t",$3,"\t\t",$4,"\t\t",$6,"\t\t",$7;} END { print "---------\nFile Complete" }' /etc/passwd

Keluaran:

User		UID		GID		Home		Shell
--------------
root 		 0 		 0 		 /root 		 /bin/bash
daemon 		 1 		 1 		 /usr/sbin 		 /usr/sbin/nologin
bin 		 2 		 2 		 /bin 		 /usr/sbin/nologin
sys 		 3 		 3 		 /dev 		 /usr/sbin/nologin
sync 		 4 		 65534 		 /bin 		 /bin/sync
games 		 5 		 60 		 /usr/games 		 /usr/sbin/nologin
man 		 6 		 12 		 /var/cache/man 		 /usr/sbin/nologin
lp 		 7 		 7 		 /var/spool/lpd 		 /usr/sbin/nologin
mail 		 8 		 8 		 /var/mail 		 /usr/sbin/nologin
news 		 9 		 9 		 /var/spool/news 		 /usr/sbin/nologin
uucp 		 10 		 10 		 /var/spool/uucp 		 /usr/sbin/nologin
proxy 		 13 		 13 		 /bin 		 /usr/sbin/nologin
www-data 		 33 		 33 		 /var/www 		 /usr/sbin/nologin
---------
File Complete

Penelusuran Bersyarat

Perintah AWK juga mendukung beberapa pernyataan bersyarat termasuk, if, while loop, for loop dan banyak lagi. Ini akan membantu Anda mengambil baris yang cocok dengan kondisi tertentu.

Contoh berikut akan menggunakan kondisi "jika" untuk mencetak semua baris yang berisi "penjualan" di bidang ketiga:

awk '{ if ($3 ~ /sales/) print}' contents.txt

Keluaran:

hitesh engineer sales 30000
bhavesh engineer sales 30000
rajesh directory sales 40000
deep clerk sales 20000

Contoh berikut akan menggunakan loop "untuk" untuk mencetak tiga bidang pertama dari setiap catatan, satu per baris.

awk '{ for (i = 1; i <= 3; i++) print $i }' contents.txt

Keluaran:

hitesh
engineer
sales
jayesh
director
account
vyom
manager
purchase
bhavesh
engineer
sales
rajesh
directory
sales
niraj
clerk
account
jay
peon
purchase
deep
clerk
sales

Contoh berikut akan menggunakan loop "sementara" untuk mencetak dua bidang pertama dari setiap catatan, satu per baris.

awk '{ i = 1;  while ( i <= 2 ) {  print $i i++ } }' contents.txt

Keluaran:

hitesh1
engineer2
jayesh1
director2
vyom1
manager2
bhavesh1
engineer2
rajesh1
directory2
niraj1
clerk2
jay1
peon2
deep1
clerk2

Memproses Output dari Perintah Lain

Anda juga dapat menggunakan perintah AWK untuk mengurai output dari perintah lain alih-alih menentukan nama file. Perintah "ip a" mencetak informasi tentang IP sistem, alamat Mac, dan informasi terkait jaringan lainnya seperti yang ditunjukkan di bawah ini:

ip a s wlan0

Keluaran:

2: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 4c:bb:58:9c:f5:55 brd ff:ff:ff:ff:ff:ff
    inet 172.20.10.3/28 brd 172.20.10.15 scope global wlan0
       valid_lft forever preferred_lft forever
    inet6 2401:4900:1d71:ef26:8846:95b2:4ca8:aa7d/64 scope global temporary dynamic 
       valid_lft 600574sec preferred_lft 81574sec
    inet6 2401:4900:1d71:ef26:4ebb:58ff:fe9c:f555/64 scope global dynamic 
       valid_lft forever preferred_lft forever
    inet6 fe80::4ebb:58ff:fe9c:f555/64 scope link 
       valid_lft forever preferred_lft forever

Sekarang, Anda dapat menggunakan perintah AWK untuk mencetak hanya alamat IP sistem seperti yang ditunjukkan di bawah ini:

ip a s wlan0 | awk -F '[\/ ]+' '/inet / {print $3}

Anda akan melihat output berikut:

172.20.10.3

Contoh Lanjutan Perintah AWK

Contoh 1: Perintah AWK memungkinkan Anda untuk mencetak baris dengan jumlah karakter tertentu. Misalnya, mencetak baris dengan lebih dari 27 karakter, gunakan perintah di bawah ini:

awk 'length($0) > 27' contents.txt

Keluaran:

jayesh director account 25000
bhavesh engineer sales 30000
rajesh directory sales 40000

Contoh 2: Periksa pangkat tiga dari angka yang diberikan

Untuk mencetak pangkat tiga dari angka yang diberikan hingga 5, jalankan perintah berikut:

awk 'BEGIN { for(i=1; i<=5; i++) print "Cube of",i,"is",i*i*i; }'

Keluaran:

Cube of 1 is 1
Cube of 2 is 8
Cube of 3 is 27
Cube of 4 is 64
Cube of 5 is 125

Contoh 3: Hitung jumlah baris dalam file yang ditentukan

Anda dapat memeriksa jumlah baris dalam file yang ditentukan dan mencetaknya menggunakan perintah berikut:

awk 'END { print NR }' contents.txt

Keluaran:

8

Contoh 4: Temukan baris terpanjang dalam file yang diberikan dan cetak karakternya

Anda dapat menemukan baris terpanjang dalam file yang diberikan dan mencetak karakter dari baris tersebut menggunakan perintah berikut:

awk '{ if (length($0) > max) max = length($0) } END { print max }' contents.txt

Keluaran

29

Contoh 5: Urutkan kolom pertama dari file yang diberikan

Untuk mengurutkan dan mencetak kolom pertama dari file isi.txt, jalankan perintah berikut:

awk -F: '{ print $1 }' contents.txt | sort

Keluaran:

bhavesh engineer sales 30000
deep clerk sales 20000
hitesh engineer sales 30000
jayesh director account 25000
jay peon purchase 23000
niraj clerk account 20000
rajesh directory sales 40000
vyom manager purchase 20000

Contoh 6: Cetak garis genap

Untuk mencetak hanya baris bernomor genap di file isi.txt, jalankan perintah berikut:

awk 'NR % 2 == 0' contents.txt

Keluaran:

jayesh director account 25000
bhavesh engineer sales 30000
niraj clerk account 20000
deep clerk sales 20000

Contoh 7: Ubah pemisah bidang

Anda dapat mengubah pemisah yang diajukan dari spasi ke | dan cetak dengan perintah berikut:

awk 'BEGIN{OFS="|"}{print $1,$2,$3,$4}' contents.txt

Keluaran:

hitesh|engineer|sales|30000
jayesh|director|account|25000
vyom|manager|purchase|20000
bhavesh|engineer|sales|30000
rajesh|directory|sales|40000
niraj|clerk|account|20000
jay|peon|purchase|23000
deep|clerk|sales|20000

Kesimpulan

Dalam tutorial ini, Anda mempelajari cara menggunakan perintah AWK untuk mencocokkan pola yang ditentukan dan kemudian melakukan tindakan terkait. Saya harap Anda memiliki gagasan yang jelas tentang cara menggunakan perintah AWK untuk memanipulasi, memformat, dan secara selektif mencetak file teks.


Linux
  1. Perintah mv Linux

  2. Linux du perintah

  3. Perintah ip Linux

  1. Perintah AWK di Linux dengan Contoh

  2. Perintah cd Linux

  3. Contoh Perintah awk di Linux

  1. Perintah ifconfig Linux

  2. Perintah Waktu Linux

  3. Perintah Ping di Linux