GNU/Linux >> Belajar Linux >  >> Linux

Array AWK Dijelaskan dengan 5 Contoh Praktis

Bahasa pemrograman awk mendukung array. Sebagai bagian dari rangkaian contoh awk yang sedang berjalan, kami telah melihat variabel yang ditentukan pengguna awk dan variabel bawaan awk. Array adalah perpanjangan dari variabel. Array adalah variabel yang menyimpan lebih dari satu nilai. Mirip dengan variabel, array juga memiliki nama. Dalam beberapa bahasa pemrograman, array harus dideklarasikan, sehingga memori akan dialokasikan untuk array. Selain itu, indeks larik biasanya bilangan bulat, seperti larik[1],array[2] dll.,

Array Asosiatif Awk

Awk hanya mendukung array asosiatif. Array asosiatif seperti array tradisional kecuali mereka menggunakan string sebagai indeks daripada angka. Saat menggunakan array asosiatif, Anda dapat meniru array tradisional dengan menggunakan string numerik sebagai indeks.

Syntax:

arrayname[string]=value

Dalam sintaks awk di atas:

  • nama array adalah nama lariknya.
  • string adalah indeks larik.
  • nilai adalah nilai apa pun yang ditetapkan ke elemen larik.

Mengakses elemen larik AWK

Jika Anda ingin mengakses elemen tertentu dalam larik, Anda dapat mengaksesnya melalui indeksnya — namaarray[index], yang memberi Anda nilai yang ditetapkan dalam indeks itu.

Jika Anda ingin mengakses semua elemen array, Anda dapat menggunakan loop untuk menelusuri semua indeks array seperti yang ditunjukkan di bawah ini.

Syntax:

for (var in arrayname)
actions

Dalam sintaks awk di atas:

  • var adalah nama variabel apa saja
  • di adalah kata kunci
  • nama array adalah nama lariknya.
  • tindakan adalah daftar pernyataan yang akan dilakukan. Jika Anda ingin melakukan lebih dari satu tindakan, tindakan tersebut harus diapit dengan kurung kurawal.

Loop ini mengeksekusi daftar tindakan untuk setiap nilai berbeda yang digunakan sebagai indeks dalam larik dengan variabel var disetel ke indeks itu.

Menghapus elemen dari larik AWK

Jika Anda ingin menghapus elemen dalam indeks array tertentu, gunakan pernyataan hapus awk. Setelah Anda menghapus elemen dari larik awk, Anda tidak dapat lagi memperoleh nilai tersebut.

Syntax:

delete arrayname[index];

Perintah loop di bawah ini menghapus semua elemen dari array. Tidak ada pernyataan tunggal untuk menghapus semua elemen dari array. Anda harus melalui loop dan menghapus setiap elemen array menggunakan pernyataan hapus awk.

for (var in array)
     delete array[var]

5 Contoh Array Awk Praktis

Semua contoh yang diberikan di bawah ini menggunakan file Iplogs.txt yang ditunjukkan di bawah ini. File teks sampel ini berisi daftar alamat ip yang diminta oleh server gateway. Contoh file Iplogs.txt ini berisi data dalam format berikut:

[date] [time] [ip-address] [number-of-websites-accessed]
$ cat Iplogs.txt
180607 093423	123.12.23.122 133
180607 121234	125.25.45.221 153
190607 084849   202.178.23.4 44
190607 084859   164.78.22.64 12
200607 012312	202.188.3.2 13
210607 084849   202.178.23.4 34
210607 121435	202.178.23.4 32
210607 132423	202.188.3.2 167

Contoh 1. Cantumkan semua alamat IP unik dan berapa kali itu diminta

$ awk '{
> Ip[$3]++;
> }
> END{
> for (var in Ip)
> print var, "access", Ip[var]," times"
> }
> ' Iplogs.txt
125.25.45.221 access 1  times
123.12.23.122 access 1  times
164.78.22.64 access 1  times
202.188.3.2 access 2  times
202.178.23.4 access 3  times

Dalam skrip di atas:

  • Kolom ketiga ($3) adalah alamat ip. Ini digunakan sebagai indeks dari array yang disebut Ip.
  • Untuk setiap baris, itu menambah nilai indeks alamat ip yang sesuai.
  • Terakhir di bagian END, semua indeks akan menjadi daftar alamat IP unik dan nilai yang sesuai adalah jumlah kemunculannya.

Contoh 2. Cantumkan semua alamat IP dan hitung berapa banyak situs yang diaksesnya

Bidang terakhir di Iplogs.txt adalah jumlah situs yang diakses setiap alamat IP pada tanggal dan waktu tertentu. Skrip di bawah ini menghasilkan laporan yang memiliki daftar alamat IP dan berapa kali ia meminta gateway dan jumlah total situs yang diaksesnya.

$cat ex2.awk
BEGIN {
print "IP Address\tAccess Count\tNumber of sites";
}
{
Ip[$3]++;
count[$3]+=$NF;
}
END{
for (var in Ip)
	print var,"\t",Ip[var],"\t\t",count[var];
}

$ awk -f ex2.awk Iplogs.txt
IP Address	Access Count	Number of sites
125.25.45.221 	 1 		 153
123.12.23.122 	 1 		 133
164.78.22.64 	 1 		 12
202.188.3.2 	 2 		 180
202.178.23.4 	 3 		 110

Pada contoh di atas:

  • Memiliki dua array. Indeks untuk kedua array sama — yang merupakan alamat IP (bidang ketiga).
  • Array pertama bernama “Ip” memiliki daftar alamat IP unik dan jumlah kemunculannya. Array kedua yang disebut "count" memiliki alamat IP sebagai indeks dan nilainya akan menjadi bidang terakhir (jumlah situs), jadi setiap kali alamat IP datang, ia terus menambahkan bidang terakhir.
  • Di bagian END, ia menelusuri semua alamat IP dan mencetak alamat Ip dan jumlah akses dari larik yang disebut Ip dan jumlah situs dari jumlah larik.

Contoh 3. Identifikasi hari akses maksimum

$ cat ex3.awk
{
date[$1]++;
}
END{
for (count in date)
{
	if ( max < date[count] ) {
		max = date[count];
		maxdate = count;
	}

}
print "Maximum access is on", maxdate;
}

$ awk -f ex3.awk Iplogs.txt
Maximum access is on 210607

Dalam contoh ini:

  • array bernama “date” memiliki tanggal sebagai indeks dan jumlah kemunculan sebagai nilai array.
  • max adalah variabel yang memiliki nilai count dan digunakan untuk mengetahui tanggal yang memiliki max count.
  • maxdate adalah variabel yang memiliki tanggal jumlah maksimum.

Contoh 4. Membalikkan urutan baris dalam file

$ awk '{ a[i++] = $0 } END { for (j=i-1; j>=0;) print a[j--] }' Iplogs.txt
210607 132423	202.188.3.2 167
210607 121435	202.178.23.4 32
210607 084849   202.178.23.4 34
200607 012312	202.188.3.2 13
190607 084859   164.78.22.64 12
190607 084849   202.178.23.4 44
180607 121234	125.25.45.221 153
180607 093423	123.12.23.122 133

Dalam contoh ini,

  • Ini dimulai dengan merekam semua baris dalam array 'a'.
  • Ketika program telah selesai memproses semua baris, Awk mengeksekusi blok END { }.
  • Blok END mengulang elemen dalam larik 'a' dan mencetak baris yang direkam secara terbalik.

Contoh 5. Hapus baris duplikat dan tidak berurutan menggunakan awk

$ cat > temp
foo
bar
foo
baz
bar

$ awk '!($0 in array) { array[$0]; print }' temp
foo
bar
baz

Dalam contoh ini:

  • Awk membaca setiap baris dari file “temp”, dan menggunakan operator “in” untuk memeriksa apakah baris saat ini ada dalam array “a”.
  • Jika tidak ada, ia menyimpan dan mencetak baris saat ini.

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.


Linux
  1. Perintah shutdown Linux Dijelaskan dengan Contoh

  2. Bash Array Dengan Contoh

  3. Perintah Gema dengan Contoh Praktis

  1. Perintah Traceroute Linux, Dijelaskan dengan Contoh

  2. Tutorial Awk:Memahami Variabel Awk dengan 3 Contoh Praktis

  3. Referensi Array Perl dan Tutorial Dereference Dengan Contoh Praktis

  1. Perintah potong Linux Dijelaskan dengan 6 Contoh

  2. Perintah AWK di Linux dengan Contoh

  3. Perintah Linux ldd Dijelaskan dengan Contoh