GNU/Linux >> Belajar Linux >  >> Linux

Memulai dengan awk, alat pengurai teks yang andal

Awk adalah alat pengurai teks yang kuat untuk sistem Unix dan mirip Unix, tetapi karena memiliki fungsi terprogram yang dapat Anda gunakan untuk melakukan tugas penguraian umum, ini juga dianggap sebagai bahasa pemrograman . Anda mungkin tidak akan mengembangkan aplikasi GUI berikutnya dengan awk, dan kemungkinan tidak akan menggantikan bahasa skrip default Anda, tetapi ini adalah utilitas yang kuat untuk tugas-tugas tertentu.

Apa tugas-tugas itu mungkin sangat beragam. Cara terbaik untuk menemukan masalah Anda yang mana yang paling baik diselesaikan dengan awk adalah dengan mempelajari awk; Anda akan terkejut melihat bagaimana awk dapat membantu Anda menyelesaikan lebih banyak hal tetapi dengan sedikit usaha.

Sintaks dasar Awk adalah:

awk [options] 'pattern {action}' file 

Untuk memulai, buat file contoh ini dan simpan sebagai colors.txt

nama       warna  jumlah
apel      merah    4
pisang     kuning 6
merah stroberi    3
anggur      ungu 10
apel      hijau  8
plum  />kiwi       coklat  4
kentang     coklat  9
nanas  kuning 5

Data ini dipisahkan menjadi kolom oleh satu atau beberapa spasi. Biasanya data yang Anda analisis diatur dalam beberapa cara. Ini mungkin tidak selalu berupa kolom yang dipisahkan oleh spasi, atau bahkan koma atau titik koma, tetapi terutama dalam file log atau dump data, umumnya ada pola yang dapat diprediksi. Anda dapat menggunakan pola data untuk membantu awk mengekstrak dan memproses data yang ingin Anda fokuskan.

Mencetak kolom

Dalam awk, cetak fungsi menampilkan apa pun yang Anda tentukan. Ada banyak variabel standar yang dapat Anda gunakan, tetapi beberapa yang paling umum adalah bilangan bulat yang menunjuk kolom dalam file teks. Cobalah:

$ awk '{print $2;}' colors.txt
warna
merah
kuning
merah
ungu
hijau
ungu
coklat
coklat
kuning

Dalam hal ini, awk menampilkan kolom kedua, dilambangkan dengan $2 . Ini relatif intuitif, jadi Anda mungkin bisa menebak bahwa mencetak $1 menampilkan kolom pertama, dan cetak $3 menampilkan yang ketiga, dan seterusnya.

Untuk menampilkan semua kolom, gunakan $0 .

Angka setelah tanda dolar ($ ) adalah ekspresi , jadi $2 dan $(1+1) artinya sama.

Memilih kolom secara kondisional

File contoh yang Anda gunakan sangat terstruktur. Ini memiliki baris yang berfungsi sebagai header, dan kolom berhubungan langsung satu sama lain. Dengan mendefinisikan kondisional persyaratan, Anda dapat memenuhi syarat apa yang Anda ingin awk kembalikan saat melihat data ini. Misalnya, untuk melihat item di kolom 2 yang cocok dengan "kuning" dan mencetak isi kolom 1:

awk '$2=="yellow"{print $1}' colors.txt
pisang
nanas

Ekspresi reguler juga berfungsi. Kondisional ini terlihat pada $2 untuk perkiraan kecocokan dengan huruf p diikuti oleh sejumlah (satu atau lebih) karakter, yang pada gilirannya diikuti oleh huruf p :

$ awk '$2 ~ /p.+p/ {print $0}' colors.txt
grape   purple  10
plum    purple  2

Angka ditafsirkan secara alami oleh awk. Misalnya, untuk mencetak baris apa pun dengan kolom ketiga yang berisi bilangan bulat lebih besar dari 5:

awk '$3>5 {print $1, $2}' colors.txt
name    color
pisang  kuning
anggur   ungu
apel   hijau
kentang  coklat

Pemisah bidang

Secara default, awk menggunakan spasi putih sebagai pemisah bidang. Namun, tidak semua file teks menggunakan spasi untuk menentukan bidang. Misalnya, buat file bernama colors.csv dengan konten ini:

nama,warna,jumlah
apel,merah,4
pisang,kuning,6
stroberi,merah,3
anggur,ungu,10
apel, hijau,8
prem,ungu,2
kiwi,coklat,4
kentang,coklat,9
nanas,kuning,5

Awk dapat memperlakukan data dengan cara yang persis sama, selama Anda menentukan karakter mana yang harus digunakan sebagai pemisah bidang dalam perintah Anda. Gunakan --field-separator (atau cukup -F singkatnya) opsi untuk menentukan pembatas:

$ awk -F"," '$2=="yellow" {print $1}' file1.csv
pisang
nanas

Menyimpan keluaran

Menggunakan pengalihan output, Anda dapat menulis hasil Anda ke file. Misalnya:

$ awk -F, '$3>5 {print $1, $2} colours.csv > output.txt 

Ini membuat file dengan konten kueri awk Anda.

Lebih banyak sumber daya Linux

  • Lembar contekan perintah Linux
  • Lembar contekan perintah Linux tingkat lanjut
  • Kursus online gratis:Ikhtisar Teknis RHEL
  • Lembar contekan jaringan Linux
  • Lembar contekan SELinux
  • Lembar contekan perintah umum Linux
  • Apa itu container Linux?
  • Artikel Linux terbaru kami

Anda juga dapat membagi file menjadi beberapa file yang dikelompokkan berdasarkan data kolom. Misalnya, jika Anda ingin membagi colors.txt menjadi beberapa file sesuai dengan warna yang muncul di setiap baris, Anda dapat menyebabkan awk mengalihkan per kueri dengan menyertakan pengalihan dalam pernyataan awk Anda:

$ awk '{print > $2".txt"}' colours.txt 

Ini menghasilkan file bernama yellow.txt , red.txt , dan seterusnya.

Di artikel berikutnya, Anda akan mempelajari lebih lanjut tentang bidang, catatan, dan beberapa variabel awk yang kuat.

Artikel ini diadaptasi dari episode Hacker Public Radio, podcast teknologi komunitas.


Linux
  1. Memulai dengan Zsh

  2. Memulai Samba untuk interoperabilitas

  3. Memulai SSH di Linux

  1. Memulai dengan ls

  2. Memulai socat, alat relai serbaguna untuk Linux

  3. Memulai PostgreSQL di Linux

  1. Memulai dengan GnuCash

  2. Memulai dengan Etcher.io

  3. Cara:Memulai dengan Ansible