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

Postingan populer dari blog ini

Cara membuat alias Bash permanen di Linux/Unix

Cara Menggunakan xargs di bash/shell Linux

Compress dan Extract File Menggunakan Tar di Bash Linux