Artikel ini adalah bagian dari seri Contoh Tutorial Awk yang sedang berlangsung. Awk memiliki beberapa variabel bawaan yang kuat. Ada dua jenis variabel bawaan di Awk.
- Variabel yang mendefinisikan nilai yang dapat diubah seperti pemisah bidang dan pemisah record.
- Variabel yang dapat digunakan untuk pemrosesan dan laporan seperti Jumlah record, jumlah field.
1. Contoh Awk FS:Variabel pemisah bidang input.
Awk membaca dan mem-parsing setiap baris dari input berdasarkan karakter spasi secara default dan mengatur variabel $1,$2 dan lain-lain. Variabel Awk FS digunakan untuk mengatur pemisah bidang untuk setiap record. Awk FS dapat diatur ke karakter tunggal atau ekspresi reguler apa pun. Anda dapat menggunakan pemisah kolom input menggunakan salah satu dari dua opsi berikut:
- Menggunakan opsi baris perintah -F.
- Awk FS dapat diatur seperti variabel normal.
Syntax: $ awk -F 'FS' 'commands' inputfilename (or) $ awk 'BEGIN{FS="FS";}'
- Awk FS adalah karakter tunggal atau ekspresi reguler yang ingin Anda gunakan sebagai pemisah kolom input.
- Awk FS dapat diubah beberapa kali, ia mempertahankan nilainya sampai diubah secara eksplisit. Jika Anda ingin mengubah pemisah bidang, lebih baik mengubahnya sebelum Anda membaca baris. Jadi perubahan itu memengaruhi baris yang Anda baca.
Berikut adalah contoh awk FS untuk membaca file /etc/passwd yang memiliki “:” sebagai pembatas bidang.
$ cat etc_passwd.awk BEGIN{ FS=":"; print "Name\tUserID\tGroupID\tHomeDirectory"; } { print $1"\t"$3"\t"$4"\t"$6; } END { print NR,"Records Processed"; }
$awk -f etc_passwd.awk /etc/passwd Name UserID GroupID HomeDirectory gnats 41 41 /var/lib/gnats libuuid 100 101 /var/lib/libuuid syslog 101 102 /home/syslog hplip 103 7 /var/run/hplip avahi 105 111 /var/run/avahi-daemon saned 110 116 /home/saned pulse 111 117 /var/run/pulse gdm 112 119 /var/lib/gdm 8 Records Processed
2. Contoh OFS Awk:Variabel Pemisah Bidang Output
Awk OFS adalah output yang setara dengan variabel awk FS. Secara default awk OFS adalah karakter spasi tunggal. Berikut ini adalah contoh OFS awk.
$ awk -F':' '{print $3,$4;}' /etc/passwd 41 41 100 101 101 102 103 7 105 111 110 116 111 117 112 119
Penggabung dalam pernyataan cetak “," menggabungkan dua parameter dengan spasi yang merupakan nilai awk OFS secara default. Jadi, nilai Awk OFS akan disisipkan di antara field pada output seperti yang ditunjukkan di bawah ini.
$ awk -F':' 'BEGIN{OFS="=";} {print $3,$4;}' /etc/passwd 41=41 100=101 101=102 103=7 105=111 110=116 111=117 112=119
3. Contoh RS Awk:Variabel Pemisah Rekam
Awk RS mendefinisikan sebuah garis. Awk membaca baris demi baris secara default.
Mari kita ambil nilai siswa yang disimpan dalam sebuah file, setiap record dipisahkan oleh baris baru ganda, dan setiap field dipisahkan oleh karakter baris baru.
$cat student.txt Jones 2143 78 84 77 Gondrol 2321 56 58 45 RinRao 2122 38 37 65 Edwin 2537 78 67 45 Dayan 2415 30 47 20
Sekarang skrip Awk di bawah ini mencetak nama Siswa dan Rollno dari file input di atas.
$cat student.awk BEGIN { RS="\n\n"; FS="\n"; } { print $1,$2; } $ awk -f student.awk student.txt Jones 2143 Gondrol 2321 RinRao 2122 Edwin 2537 Dayan 2415
Dalam skrip student.awk, ia membaca setiap detail siswa sebagai satu record, karena awk RS telah ditetapkan untuk menggandakan karakter baris baru dan setiap baris dalam record adalah bidang, karena FS adalah karakter baris baru.
4. Contoh ORS Awk:Variabel Pemisah Catatan Keluaran
Awk ORS adalah Output yang setara dengan RS. Setiap record dalam output akan dicetak dengan pembatas ini. Berikut ini adalah contoh ORS awk:
$ awk 'BEGIN{ORS="=";} {print;}' student-marks Jones 2143 78 84 77=Gondrol 2321 56 58 45=RinRao 2122 38 37 65=Edwin 2537 78 67 45=Dayan 2415 30 47 20=
Pada script di atas, setiap record dalam file student-marks file dibatasi oleh karakter “=”.
5. Contoh Awk NR:Jumlah Variabel Catatan
Awk NR memberi Anda jumlah total catatan yang sedang diproses atau nomor baris. Dalam contoh awk NR berikut, variabel NR memiliki nomor baris, di bagian END awk NR memberi tahu Anda jumlah total record dalam sebuah file.
$ awk '{print "Processing Record - ",NR;}END {print NR, "Students Records are processed";}' student-marks Processing Record - 1 Processing Record - 2 Processing Record - 3 Processing Record - 4 Processing Record - 5 5 Students Records are processed
6. Contoh Awk NF:Jumlah Bidang dalam catatan
Awk NF memberi Anda jumlah total bidang dalam catatan. Awk NF akan sangat berguna untuk memvalidasi apakah semua bidang ada dalam catatan.
Mari kita ambil file nilai siswa, skor Test3 hilang untuk siswa seperti yang ditunjukkan di bawah ini.
$cat student-marks Jones 2143 78 84 77 Gondrol 2321 56 58 45 RinRao 2122 38 37 Edwin 2537 78 67 45 Dayan 2415 30 47
Skrip Awk berikut, mencetak nomor Rekam(baris), dan jumlah bidang dalam rekaman itu. Jadi akan sangat mudah untuk mengetahui bahwa skor Test3 tidak ada.
$ awk '{print NR,"->",NF}' student-marks 1 -> 5 2 -> 5 3 -> 4 4 -> 5 5 -> 4
7. Awk FILENAME Contoh:Nama file input saat ini
Variabel FILENAME memberikan nama file yang sedang dibaca. Awk dapat menerima sejumlah file input untuk diproses.
$ awk '{print FILENAME}' student-marks student-marks student-marks student-marks student-marks student-marks
Dalam contoh di atas, ia mencetak NAMA FILE yaitu tanda siswa untuk setiap catatan dari file input.
8. Contoh FNR Awk:Jumlah Catatan relatif terhadap file input saat ini
Ketika awk membaca dari beberapa file input, variabel awk NR akan memberikan jumlah total catatan relatif terhadap semua file input. Awk FNR akan memberi Anda jumlah catatan untuk setiap file input.
$ awk '{print FILENAME, FNR;}' student-marks bookdetails student-marks 1 student-marks 2 student-marks 3 student-marks 4 student-marks 5 bookdetails 1 bookdetails 2 bookdetails 3 bookdetails 4 bookdetails 5
Dalam contoh di atas, alih-alih awk FNR, jika Anda menggunakan awk NR, untuk detail buku file, Anda akan mendapatkan dari 6 hingga 10 untuk setiap record.
Bacaan yang Disarankan
Sed dan Awk 101 Hacks, oleh Ramesh Natarajan . Saya menghabiskan beberapa jam sehari di lingkungan UNIX / Linux yang berurusan dengan file teks (data, konfigurasi, dan file log). Saya menggunakan Sed dan Awk untuk semua pekerjaan manipulasi teks saya. Berdasarkan pengalaman Sed dan Awk saya, saya telah menulis eBook Sed dan Awk 101 Hacks yang berisi 101 contoh praktis tentang berbagai fitur canggih Sed dan Awk yang akan meningkatkan kehidupan UNIX / Linux Anda. Bahkan jika Anda telah menggunakan Sed dan Awk selama beberapa tahun dan belum membaca buku ini, bantulah diri Anda sendiri dan baca buku ini. Anda akan kagum dengan kemampuan utilitas Sed dan Awk.