Linux AWK command
awk merupakan tools modifikasi text yang paling sering digunakan dalam bash/shell scripting. Terutama bagi pengguna automation tools atau CI/CD seperti Jenkins, tidak akan lepas akan penggunaan awk. Karena awk, dapat bekerja dihampir semua command di linux.
awk bekerja berdasarkan rules dan pattern. yang ditandai dengan tanda kurung siku {}
Sebagai contoh, berikut perintah sederhana docker
docker image ls
1 2 3 4 5 | [root@ip-xxxx ~]# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE gcr.io/k8s-minikube/kicbase v0.0.32 ff7b11088f07 7 weeks ago 1.15GB openproject/community 12 24aa27283047 2 months ago 1.87GB [root@ip-xxxx ~]# |
Dari hasil yang didapat tersebut, katakanlah kita hanya ingin mengambil kolom repository dan tag.
Gunakan koma untuk mendapatkan pemisah
docker image ls | awk '{print $1,$2'}
1 2 3 4 | [root@ip-xxxx ~]# docker image ls | tail -n2 | awk '{print $1,$2'} gcr.io/k8s-minikube/kicbase v0.0.32 openproject/community 12 [root@ip-xxxx ~]# |
Berikut arti dari parameter awk
$0 | menampilkan keseluruhan output |
$1 | menampilkan kolom 1 dari output |
$2 | menampilkan kolom 2 dari output |
$50 | menampilkan kolom 50 dari output |
$NF | "Number of Fields", menampilkan kolom terakhir |
OFS - Output Field Separator
Jika kita ingin menambahkan custom separator, awk juga mendukung fungsi ini. Untuk menambahkan separator kepada seluruh output dapat menggunakan tag OFS.
Sebagai contoh, reformat date
date | awk '{print $6,$2,$3}'
1 2 3 4 5 | [ec2-user@ip-10-20-14-21 ~]$ date Thu Aug 4 11:52:03 WIB 2022 [ec2-user@ip-10-20-14-21 ~]$ date | awk '{print $6,$2,$3}' 2022 Aug 4 [ec2-user@ip-10-20-14-21 ~]$ |
Kita akan gunakan OFS sebagai pemisah output dengan simbol dash "-" atau slash "/".
date | awk 'OFS="-" {print $6,$2,$3}'
date | awk 'OFS="/" {print $6,$2,$3}'
1 2 3 4 5 | [ec2-user@ip-10-20-14-21 ~]$ date | awk 'OFS="-" {print $6,$2,$3}' 2022-Aug-4 [ec2-user@ip-10-20-14-21 ~]$ date | awk 'OFS="/" {print $6,$2,$3}' 2022/Aug/4 [ec2-user@ip-10-20-14-21 ~]$ |
Ketika menggunakan OFS, maka seluruh separator akan mengikuti sintak OFS yang diberikan. Bagaimana bila ingin menggunakan separator yang berbeda-beda? Cukup gunakan string biasa untuk memisahkan antar field.
1 2 3 | [ec2-user@ip-10-20-14-21 ~]$ date | awk '{print $6 "/" $2 "-" $3}' 2022/Aug-4 [ec2-user@ip-10-20-14-21 ~]$ |
IFS - Input Field Separator
Secara default, awk menggunakan spasi kosong sebagai input dari pemisahan string. Bagaimana jika input tidak menggunakan spasi kosong, melainkan menggunakan slash "/", koma ",", atau bahkan menggunakan dash "-"? Jawabannya adalah menggunakan IFS untuk merubah default white space.
awk dengan IFS colon (:)
awk -F: '{print $1,$6}' /etc/passwd
Dapatkan bonus wallet untuk setiap transaksi di XM hingga $25 per lot. Buka akun trading Wallstreet, nasdaq, snp500 atau forex
Komentar
Posting Komentar