hanya ingin tahu apa perbedaan utama di antara mereka? dan kekuatan setiap bahasa (di mana lebih baik menggunakannya).
Sunting: ini bukan "vs." seperti topik, hanya informasi.
hanya ingin tahu apa perbedaan utama di antara mereka? dan kekuatan setiap bahasa (di mana lebih baik menggunakannya).
Sunting: ini bukan "vs." seperti topik, hanya informasi.
Jawaban:
Dalam rangka penampilan, bahasa yang sed
, awk
, perl
, python
.
The sed
Program adalah editor aliran dan dirancang untuk menerapkan tindakan dari script untuk setiap baris (atau, lebih umum, untuk rentang tertentu dari garis) dari file input atau file. Bahasanya didasarkan pada ed
, editor Unix, dan meskipun memiliki persyaratan dan sebagainya, sulit untuk bekerja dengan untuk tugas-tugas kompleks. Anda dapat melakukan mukjizat kecil dengan itu - tetapi dengan biaya untuk rambut di kepala Anda. Namun, itu mungkin yang tercepat dari program ketika mencoba tugas-tugas dalam pengirimannya. (Ini memiliki ekspresi reguler paling kuat dari program yang dibahas - memadai untuk banyak tujuan, tetapi tentu saja tidak PCRE - Ekspresi Reguler Kompatibel Kompatibel)
The awk
Program (nama dari inisial penulisnya - Aho, Weinberger, dan Kernighan) adalah alat awalnya untuk memformat laporan. Dapat digunakan sebagai sup sed
; dalam versi yang lebih baru, ini komputasional lengkap. Ini menggunakan ide yang menarik - program ini didasarkan pada 'pola yang cocok' dan 'tindakan yang diambil ketika pola cocok'. Polanya cukup kuat (Extended Regular Expressions). Bahasa untuk tindakan mirip dengan C. Salah satu fitur utama awk
adalah bahwa ia membagi input secara otomatis ke dalam catatan dan setiap catatan ke dalam bidang.
Perl ditulis sebagian sebagai awk-killer dan sed-killer. Dua dari program yang disediakan dengan itu yang a2p
dan s2p
untuk mengkonversi awk
skrip dan sed
script ke Perl. Perl adalah salah satu yang paling awal dari generasi bahasa scripting berikutnya (Tcl / Tk mungkin bisa mengklaim keunggulan). Ini memiliki penanganan ekspresi reguler terintegrasi yang kuat dengan bahasa yang jauh lebih kuat. Ini menyediakan akses ke hampir semua panggilan sistem dan memiliki ekstensibilitas modul CPAN. (Tidak awk
juga sed
tidak dapat diperpanjang.) Salah satu motto Perl adalah "TMTOWTDI - Ada lebih dari satu cara untuk melakukannya" (diucapkan "tim-toady"). Perl memiliki 'objek', tetapi lebih merupakan add-on daripada bagian mendasar dari bahasa.
Python ditulis terakhir, dan mungkin sebagian sebagai reaksi terhadap Perl. Ini memiliki beberapa ide sintaksis yang menarik (indentasi untuk menunjukkan level - tanpa kawat gigi atau yang setara). Ini lebih berorientasi objek daripada Perl; itu sama extensible dengan Perl.
OK - kapan harus menggunakan masing-masing?
Saya tidak mengetahui apa pun yang Perl dapat melakukan itu Python tidak bisa, atau sebaliknya. Pilihan antara keduanya akan tergantung pada faktor-faktor lain. Saya belajar Perl sebelum ada Python, jadi saya cenderung menggunakannya. Python memiliki sintaks yang kurang bertambah dan umumnya agak mudah dipelajari. Perl 6, ketika tersedia, akan menjadi perkembangan yang menarik.
(Perhatikan bahwa 'ikhtisar' Perl dan Python, khususnya, sangat tidak lengkap; seluruh buku dapat ditulis pada topik.)
awk
lebih sed
untuk belajar (meskipun keduanya masih memiliki kegunaan). Adapun ukuran tugas: sed
adalah yang terbaik ketika memproses satu baris pada satu waktu, tanpa penyimpanan dari baris ke baris. awk
sering digunakan untuk membangun array asosiatif dengan data yang terakumulasi dari semua sumber; itu menggunakan lebih banyak memori, dan karena itu jauh lebih mungkin untuk mengalami masalah dengan set data besar daripada yang sed
ada. Saya belum pernah mendengar tsawk
sebelum Anda menautkannya. Saya cenderung untuk kembali ke Perl (tetapi Anda mungkin melakukan yang lebih baik dengan Python) ketika tugas terlalu banyak awk
.
Setelah menguasai beberapa lusin bahasa, Anda bosan dengan orang-orang seperti S. Lott (lihat jawaban kontroversialnya untuk pertanyaan ini, hampir setengah jumlah suara turun dari (+ 45 / -22) enam tahun setelah menjawab).
Sed adalah alat terbaik untuk pipa saluran perintah yang sangat sederhana. Di tangan master sed, itu cocok untuk satu kali kompleksitas arbitrer, tetapi tidak boleh digunakan dalam kode produksi kecuali dalam pipa substitusi yang sangat sederhana. Hal-hal seperti 'ini / itu / itu.'
Gawk (GNU awk) sejauh ini merupakan pilihan terbaik untuk memformat ulang data yang kompleks ketika hanya ada satu sumber input tunggal dan satu output tunggal (atau, beberapa output ditulis secara berurutan). Karena banyak pekerjaan dunia nyata sesuai dengan deskripsi ini, dan seorang programmer yang baik dapat belajar melongo dalam dua jam, itu adalah pilihan terbaik. Di planet ini, lebih sederhana dan lebih cepat lebih baik!
Perl atau Python jauh lebih baik daripada versi awk atau sed ketika Anda memiliki skenario input / output yang sangat kompleks. Semakin kompleks masalahnya, semakin baik Anda menggunakan python, dari sudut pandang pemeliharaan dan keterbacaan. Perhatikan, bagaimanapun, bahwa seorang programmer yang baik dapat menulis kode yang dapat dibaca dalam bahasa apa pun, dan seorang programmer yang buruk dapat menulis omong kosong yang tidak dapat dipertahankan dalam bahasa apa pun yang berguna, sehingga pilihan perl atau python dapat dengan aman diserahkan kepada preferensi programmer jika programmer tersebut mengatakan terampil dan pintar.
a?ⁿaⁿ
untuk a??ⁿaⁿ
kemudian jalankan di Perl 5 dengan ⁿ
1.000.000 itu berjalan dalam waktu kurang dari dua detik. time perl -E '$x=1_000_000;$_="a"x$x;$m=("a??"x$x).("a"x$x);say $_=~$m'
Jika Anda menjalankan yang naif, dibutuhkan lebih dari dua detik untuk ⁿ
hanya 25. Hal yang harus Anda sadari adalah Perl memiliki lebih banyak fitur regex daripada yang lebih cepat termasuk memungkinkan Anda untuk memiliki kode Perl di dalam regex yang mengubah apa yang cocok. . Anda bisa mengimplementasikan modul yang menukar built-in untuk salah satu dari yang lainnya jika Anda mau.
Saya tidak akan menyebut sed sebagai bahasa pemrograman yang lengkap, itu adalah editor aliran dengan konstruksi bahasa yang ditujukan untuk mengedit file teks secara terprogram.
Bahasa awk sedikit lebih dari bahasa tujuan umum tetapi masih paling cocok untuk pemrosesan teks.
Perl dan Python sepenuhnya dikembangkan, bahasa pemrograman untuk tujuan umum. Perl berakar pada pemrosesan teks dan memiliki sejumlah konstruksi seperti awk (bahkan ada skrip awk-to-perl yang melayang-layang di internet). Ada banyak perbedaan antara Perl dan Python, taruhan terbaik Anda mungkin adalah membaca ringkasan kedua bahasa pada sesuatu seperti Wikipedia untuk mendapatkan pemahaman yang baik tentang apa itu.
Pertama, ada dua hal yang tidak terkait dalam daftar "Perl, Python awk and sed".
Hal 1 - alat manipulasi teks sederhana.
sed. Ini memiliki lingkup pekerjaan yang tetap, relatif sederhana yang ditentukan oleh gagasan membaca dan memeriksa setiap baris file. sed tidak dirancang agar mudah dibaca. Ini dirancang untuk menjadi sangat kecil dan sangat efisien pada server unix yang sangat kecil.
awk. Ini memiliki lingkup pekerjaan yang sedikit kurang tetap, kurang sederhana. Namun, loop utama program awk didefinisikan oleh pembacaan tersirat dari baris file sumber.
Ini bukan bahasa pemrograman "lengkap". Meskipun Anda dapat - dengan beberapa pekerjaan - menulis program yang cukup canggih dalam awk, ia dengan cepat menjadi rumit dan sulit dibaca.
Hal 2 - bahasa pemrograman untuk tujuan umum. Ini memiliki beragam jenis pernyataan, banyak struktur data bawaan, dan tidak ada asumsi atau pintasan berkabel untuk berbicara.
Perl.
Python.
Kapan menggunakannya.
sed. Tidak pernah. Ini benar-benar tidak memiliki nilai di era komputer modern dengan memori lebih dari 32 ribu. Perl atau Python melakukan hal yang sama dengan lebih jelas.
awk. Tidak pernah. Seperti sed, itu mencerminkan era komputasi sebelumnya. Daripada mempertahankan bahasa ini (selain semua yang diperlukan untuk sistem yang sukses), lebih menyenangkan untuk melakukan semuanya dalam satu bahasa yang menyenangkan.
Perl. Masalah pemrograman apa pun. Jika Anda menyukai sintaks berpikir bebas, di mana ada banyak, banyak cara untuk melakukan hal yang sama, perl itu menyenangkan.
Python. Masalah pemrograman apa pun. Jika Anda menyukai sintaks yang cukup terbatas, di mana ada lebih sedikit pilihan, lebih sedikit kehalusan, dan (mungkin) lebih jelas. Sifat berorientasi objek Python membuatnya lebih cocok untuk masalah besar dan kompleks.
Background - Saya tidak memukul sed dan canggung karena ketidaktahuan. Saya belajar awk lebih dari 20 tahun yang lalu. Melakukan banyak hal dengannya; digunakan untuk mengajarkannya sebagai keterampilan inti unix. Saya belajar Perl sekitar 15 tahun yang lalu. Melakukan banyak hal canggih dengannya. Saya telah meninggalkan keduanya karena saya dapat melakukan hal yang sama dengan Python - dan lebih sederhana dan lebih jelas.
Ada dua masalah serius dengan sed dan awk, yang keduanya tidak seusia mereka.
Ketidaklengkapan implementasi mereka. Semua yang dilakukan oleh sed dan awk dapat dilakukan dengan Python atau Perl, seringkali lebih sederhana dan terkadang lebih cepat juga. Pipeline shell memiliki beberapa keunggulan kinerja karena multi-processing. Python menawarkan subprocess
modul untuk memungkinkan saya memulihkan keunggulan itu.
Kebutuhan untuk belajar bahasa lain. Dengan melakukan hal-hal dengan Python (atau Perl) implementasi Anda bergantung pada lebih sedikit bahasa, dengan hasil peningkatan kejelasan.
Kapan menggunakannya: awk - never - S. Lott.
Saya pikir S. Lott sedikit ketinggalan tanda dengan rekomendasi ini. Faktanya adalah, di Linux dan lingkungan UNIX lainnya, awk adalah alat yang berguna untuk digunakan dengan bash, sh, dan ksh untuk pemrosesan teks cepat. Gagasan skrip itu sendiri adalah Anda memecahkan masalah Anda dengan menempelkan alat ini bersama-sama, alat itu. Karenanya dalam skrip admin, adalah umum untuk memiliki ls, grep, |, awk, waktu, ps, dll. Masing-masing adalah alat yang digabungkan oleh skrip seperti pembangun bata demi bata untuk menyelesaikan bangunan (untuk menyelesaikan masalah yang dihadapi) .
Misalnya saya adalah anggota tim dari tim yang mengelola persediaan peralatan paintballdotcom. Situs e-commerce ini didasarkan pada tumpukan LAMP. Untuk pemrosesan otomatis dan normalisasi umpan data dari berbagai pemasok ke dalam database back end, kami menggunakan dan memelihara campuran beragam skrip, termasuk bash, perl, php, dan bahkan yang diharapkan. Masing-masing memiliki kekuatan berdasarkan modul dan API yang tersedia. Dalam skrip bash, kami melakukan pencocokan pola cepat dan tindakan yang sesuai pada pola sesuai kebutuhan menggunakan awk tanpa perlu beralih ke PERL. Satu hal yang juga ingin saya tunjukkan, yang belum ditekankan dalam utasnya, adalah bahwa cukup banyak skrip ini dibeli, atau diperoleh dari sumber terbuka. Jika skrip muncul sebagai Perl, kami mempertahankannya sebagai Perl; jika skrip muncul sebagai Php, kami mempertahankannya sebagai Php; jika itu datang sebagai bash, kami mempertahankannya sebagai bash;
ls
, gunakan glob sebagai gantinya. Baca ini.