Belajar dengan membaca secara berurutan

awk — Ekstraksi Field

Praktik awk: '{print $1}' mengambil satu kolom, $NF mengambil kolom terakhir, -F',' mengubah pemisah menjadi koma, NR dan NF, serta /error/{print $2} hanya memproses baris yang cocok — divisualisasikan dan bisa langsung dicoba di terminal browser.

Mengambil Kolom — $1 / $NF / -F

awk adalah perintah yang memisahkan setiap baris menjadi kolom (field) berdasarkan spasi dan memungkinkan kamu memprosesnya per kolom. Menulis awk '{print $1}' akan mengambil dan mencetak hanya kolom pertama dari setiap baris. Di dalam {} kamu menulis aksi yang dijalankan pada setiap baris (di sini, print). $1 adalah kolom pertama, $2 adalah kolom kedua, dan $0 mengacu pada seluruh baris.

$NF adalah cara khusus untuk mengacu pada kolom terakhir. NF adalah variabel yang menyimpan jumlah field dalam satu baris, sehingga $NF memberi kamu kolom terakhir dari baris tersebut. Bahkan ketika jumlah kolom berbeda dari baris ke baris, kamu selalu mendapatkan yang terakhir. Ketika pemisah bukan spasi, tentukan dengan -F, seperti -F','. Lebih aman membungkus pemisah dalam tanda kutip (-F',').

printf 'alice 30 tokyo\nbob 25 osaka\n' > users.txt   # buat materi
awk '{print $1}' users.txt                              # kolom 1: alice dan bob
awk '{print $2}' users.txt                              # kolom 2: 30 dan 25
awk '{print $NF}' users.txt                             # kolom terakhir: tokyo dan osaka
printf 'alice,30\nbob,25\n' > csv.txt                  # materi dengan pemisah koma
awk -F',' '{print $1}' csv.txt                          # pemisah koma, kolom 1
Cara awk menghitung kolom
alice30tokyo$1 = alice$2 = 30$NF = tokyo (terakhir)
$1 adalah kolom pertama, dan $NF menunjuk ke kolom terakhir baris tersebut.
BentukArtiContoh
$1Ambil kolom 1awk '{print $1}' users.txt
$2Ambil kolom 2awk '{print $2}' users.txt
$NFAmbil kolom terakhirawk '{print $NF}' users.txt
$0Ambil seluruh barisawk '{print $0}' users.txt
-F','Ubah pemisah menjadi komaawk -F',' '{print $1}' csv.txt
NRNomor baris saat iniawk '{print NR, $0}' nf.txt
NFJumlah field dalam barisawk '{print NF}' nf.txt
/pat/{print $1}Cetak kolom 1 dari baris yang cocok dengan patawk '/error/{print $1}' log.txt

① Buat materi dengan pemisah spasi menggunakan printf 'alice 30 tokyo\nbob 25 osaka\n' > users.txt.

② Periksa isinya dengan cat users.txt.

③ Gunakan awk untuk mencetak hanya kolom pertama dari setiap baris.

④ Kemudian gunakan awk '{print $2}' users.txt untuk mencetak kolom kedua dari setiap baris.

⑤ Selanjutnya, gunakan bentuk yang mengacu pada kolom terakhir untuk mencetak kolom terakhir dari setiap baris.

⑥ Buat materi dengan pemisah koma menggunakan printf 'alice,30\nbob,25\n' > csv.txt, lalu cetak kolom 1 dengan opsi yang menentukan pemisah. (Jika kamu menjalankannya dengan benar, penjelasan akan muncul.)

Linux console
0 / 7 selesai
Loading Linux Terminal...

Nomor Baris dan Jumlah Field — NR / NF

NR adalah variabel bawaan yang menyimpan nomor baris yang sedang diproses, dan NF menyimpan jumlah field dari baris tersebut. Menulis awk '{print NR, $0}' mencetak setiap baris lengkap dengan nomor baris di depannya. Dengan awk '{print NF}' kamu bisa melihat berapa kolom yang terbentuk dari setiap baris.

printf 'red\ngreen blue\n' > nf.txt   # buat materi
awk '{print NR, $0}' nf.txt             # 1 red / 2 green blue
awk '{print NF}' nf.txt                 # baris 1 punya 1 kolom, baris 2 punya 2

① Buat dua baris dengan jumlah field berbeda menggunakan printf 'red\ngreen blue\n' > nf.txt.

② Dengan awk, gabungkan variabel untuk nomor baris dengan seluruh baris untuk mencetak setiap baris dengan nomornya di depan.

③ Kemudian cetak variabel untuk jumlah field dan periksa bahwa baris 1 dan baris 2 memiliki jumlah yang berbeda.

Linux console
0 / 3 selesai
Loading Linux Terminal...

Memproses Hanya Baris yang Cocok — /pat/{print ...}

Ketika kamu menulis pola sebelum program, awk hanya menerapkan program tersebut pada baris yang cocok. awk '/error/{print $1}' mencetak kolom 1 hanya untuk baris yang mengandung error. Di mana grep menampilkan seluruh baris, awk bisa mengambil hanya kolom yang kamu butuhkan dari baris yang cocok.

Proses hanya baris yang cocok dengan pola
awk '{print $1}' fcetak kolom 1semua barisawk '/error/{print $1}' fkolom 1 hanyabaris error
Pola sebelum program mempersempit baris mana yang diproses.
printf 'error disk\ninfo start\nerror cpu\n' > log.txt   # buat materi
awk '/error/{print $2}' log.txt                            # kolom 2 dari baris error: disk dan cpu

① Buat file materi dengan printf 'error disk\ninfo start\nerror cpu\n' > log.txt.

② Dengan awk, tulis pola sebelum program dan cetak kolom 2 hanya untuk baris yang mengandung error.

③ Periksa bahwa kata yang dicetak hanyalah kolom yang diambil dari baris error.

④ Jalankan juga grep error log.txt dan bandingkan: grep mencetak seluruh baris, sedangkan awk mencetak hanya kolom 2.

Linux console
0 / 3 selesai
Loading Linux Terminal...
QUIZ

Cek Pemahaman

Jawab setiap pertanyaan satu per satu.

Soal 1Apa yang dikeluarkan oleh awk '{print $1}' f?

Soal 2Opsi apa yang kamu tambahkan agar awk menggunakan koma sebagai pemisah?

Soal 3Baris mana yang diproses oleh awk '/error/{print $1}' f?