- Apa perbedaan antara awk dan sed?
- Apa jenis aplikasi kasus penggunaan terbaik untuk sed dan alat awk?
Jawaban:
sed
adalah editor aliran. Ini bekerja dengan aliran karakter pada basis per-line. Ini memiliki bahasa pemrograman primitif yang mencakup loop gaya goto dan persyaratan sederhana (selain pencocokan pola dan pencocokan alamat). Pada dasarnya hanya ada dua "variabel": ruang pola dan ruang tahan. Keterbacaan skrip bisa sulit. Operasi matematika sangat canggung.
Ada berbagai versi sed
dengan level dukungan yang berbeda untuk opsi baris perintah dan fitur bahasa.
awk
berorientasi pada bidang yang dibatasi pada basis per-baris. Ini memiliki jauh lebih kuat konstruksi pemrograman termasuk if
/ else
, while
, do
/ while
dan for
(C-gaya dan berbagai iterasi). Ada dukungan lengkap untuk variabel dan array asosiatif dimensi-tunggal plus (IMO) array multi-dimensi kludgey. Operasi matematika mirip dengan yang ada di C. Ini memiliki printf
dan berfungsi. "K" dalam "AWK" adalah singkatan dari " K ernighan" seperti dalam "Kernighan dan Ritchie" dari buku "C Programming Language" ketenaran (jangan lupa A ho and W einberger). Seseorang dapat dengan mudah menulis pendeteksi plagiarisme akademik awk
.
GNU awk
( gawk
) memiliki banyak ekstensi, termasuk array multidimensi sejati dalam versi terbaru. Ada variasi lain awk
termasuk mawk
dan nawk
.
Kedua program menggunakan ekspresi reguler untuk memilih dan memproses teks.
Saya akan cenderung menggunakan di sed
mana ada pola dalam teks. Misalnya, Anda dapat mengganti semua angka negatif dalam beberapa teks yang berada dalam bentuk "tanda minus diikuti dengan urutan angka" (mis. "-231,45") dengan formulir "tanda kurung akuntan" (mis. "(231.45)" ) menggunakan ini (yang memiliki ruang untuk perbaikan):
sed 's/-\([0-9.]\+\)/(\1)/g' inputfile
Saya akan menggunakan awk
ketika teks lebih mirip baris dan kolom atau, sebagaimana awk
merujuk pada mereka "catatan" dan "bidang". Jika saya akan melakukan operasi yang sama seperti di atas, tetapi hanya pada bidang ketiga dalam file dibatasi koma sederhana saya mungkin melakukan sesuatu seperti:
awk -F, 'BEGIN {OFS = ","} {gsub("-([0-9.]+)", "(" substr($3, 2) ")", $3); print}' inputfile
Tentu saja itu hanya contoh sederhana yang tidak menggambarkan berbagai kemampuan yang ditawarkan masing-masing.
sed
: sed.sourceforge.net/#script
1) Apa perbedaan antara awk dan sed?
Keduanya adalah alat yang mengubah teks. TETAPI awk dapat melakukan lebih banyak hal selain hanya memanipulasi teks. Ini adalah bahasa pemrograman dengan sendirinya dengan sebagian besar hal yang Anda pelajari dalam pemrograman, seperti array, loop, jika / selain kontrol aliran dll. Anda dapat "memprogram" juga, tetapi Anda tidak ingin mempertahankan kode yang tertulis di dalamnya .
2) Apa jenis aplikasi kasus penggunaan terbaik untuk sed dan alat awk?
Kesimpulan: Gunakan sed untuk parsing teks yang sangat sederhana. Lebih dari itu, awk lebih baik. Bahkan, Anda bisa membuang semuanya dan hanya menggunakan awk. Karena fungsinya tumpang tindih dan awk dapat melakukan lebih banyak, gunakan saja awk. Anda akan mengurangi kurva belajar Anda juga.
sed
, 's/search/replace'
jauh lebih mudah untuk mengetik daripada awk
sintaks dan itulah yang paling Anda butuhkan.
Kedua alat dimaksudkan untuk bekerja dengan teks dan ada tugas kedua alat dapat digunakan untuk.
Bagi saya aturan untuk memisahkannya adalah: Gunakan sed
untuk mengotomatiskan tugas yang akan Anda lakukan sebaliknya dalam editor teks secara manual. Itu sebabnya disebut stream editor . (Anda dapat menggunakan perintah yang sama untuk mengedit teks dalam vim). Gunakan awk
jika Anda ingin menganalisis teks, artinya bidang penghitungan, menghitung total, mengekstraksi, dan menyusun kembali struktur, dll.
Anda juga jangan lupa grep
. Gunakan grep
jika Anda hanya ingin mencari / mengekstrak sesuatu dalam teks (file)