GNU/Linux >> Belajar Linux >  >> Linux

8 Variabel Bawaan Awk yang Kuat – FS, OFS, RS, ORS, NR, NF, FILENAME, FNR

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.

  1. Variabel yang mendefinisikan nilai yang dapat diubah seperti pemisah bidang dan pemisah record.
  2. 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:

  1. Menggunakan opsi baris perintah -F.
  2. 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.


Linux
  1. 4 Contoh Pernyataan Awk If ( if, if else, if else if, :? )

  2. 7 Contoh Operator Awk yang Kuat (Unary, Binary, Arithmetic, String, Assignment, Conditional, Reg-Ex Awk Operators)

  3. 9 Fungsi Built-in Awk yang Kuat untuk Numerik

  1. Variabel Eksternal Dalam Awk?

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

  3. Penjelasan tentang perintah awk menggunakan ORS, NR, FS, RS

  1. AWK Vs NAWK Vs GAWK

  2. Memeriksa variabel lingkungan

  3. Apakah mungkin menggunakan / dalam nama file?