Kokie yra perl, python, awk ir sed skirtumai?

tiesiog norite sužinoti, kokie yra pagrindiniai jų skirtumai? ir kiekvienos kalbos galia (kur geriau ją naudoti).

Redaguoti: tai neprieštarauja kaip temai, tik informacijai.

209
15 дек. nustatė Khaled Al Hourani 15 d. 2008-12-15 00:00 '08 0:00 2008-12-15 00:00
@ 5 atsakymai

Išvaizdos tvarka, kalbos sed , awk , perl , python .

sed programa yra srauto redaktorius ir skirta naudoti scenarijų veiksmus kiekvienai įvesties failo arba failų eilutei (arba apskritai nurodytoms linijų grupėms). Jo kalba pagrįsta „ ed , „Unix“ redaktoriumi, ir nors ji turi konvencijas ir tt, sunku dirbti sudėtingoms užduotims atlikti. Jūs galite dirbti su jais kai kuriais stebuklais, bet už galvos plaukus. Tačiau tai greičiausiai yra greičiausia programa, kai bandoma užbaigti užduotis pagal savo įgaliojimus. (Ji turi mažiausiai galingas reguliarias aptariamų programų išraiškas - tinkamas daugeliui tikslų, bet, žinoma, ne PCRE - reguliarios išraiškos, suderinamos su Perlu)

awk programa (jos autorių, „Aho“, „Weinberger“ ir „Kernighan“ inicialų pavadinimas) yra įrankis, iš pradžių sukurtas ataskaitų formavimui. Jis gali būti naudojamas kaip sed ; vėlesnėse jos versijose jis yra skaičiuojamas. Jis naudoja įdomią idėją - programa yra pagrįsta „susietais modeliais“ ir „veiksmais, kurių imtasi, kai modeliai atitinka.“ Modeliai yra gana galingi (išplėstinės reguliarios išraiškos). Veiksmų kalba yra panaši į C. Vienas iš pagrindinių „ awk bruožų yra tai, kad ji automatiškai suskaido įvesties eilutes į laukus.

Perlas buvo parašytas kaip awk-killer ir sed-killer. Dvi iš pateiktų programų yra a2p ir s2p konvertuojant „ awk ir „ sed scenarijus į „Perl“. Perl yra viena iš pirmųjų naujos kartos kalbų (Tcl / Tk gali reikalauti pirmenybės). Jis turi galingą integruotą reguliarios išraiškos apdorojimą su daug galingesne kalba. Jis suteikia prieigą prie beveik visų sistemos skambučių ir turi CPAN modulių išplėtimo galimybę. (Nei awk nei sed egzistuoja.) Vienas iš Perlo „mottos“ yra „TMTOWTDI - yra daugiau nei vienas būdas tai padaryti“ (tariamas „tim-toady“). Perl turi "objektų", tačiau tai yra daugiau nei pagrindinė kalbos dalis.

Pythonas buvo parašytas paskutinis ir galbūt iš dalies kaip reakcija į Perl. Jame yra įdomių sintaksinių idėjų (lygių žymėjimai - be petnešų ar ekvivalentų). Tai labiau objekto orientuota nei Perl; jis yra toks pat išplėtimas kaip Perl.

Gerai - kada naudoti kiekvieną?

  • sed - kai reikia atlikti paprastas teksto konversijas failuose.
  • awk - kai jums reikia paprasto formato, apibendrinimo arba duomenų konversijos.
  • Perl yra beveik bet kokioms užduotims, bet ypač kai užduotis reikalauja sudėtingų reguliarių išraiškų.
  • python - už tas pačias užduotis, kurias galite naudoti „Perl“.

Aš nežinau nieko, ką Perl gali padaryti, kad Python negali, ir atvirkščiai. Jų pasirinkimas priklausys nuo kitų veiksnių. Aš mokiausi Perlo prieš Python atvykimą, todėl bandau jį naudoti. „Python“ turi mažiau patobulintos sintaksės ir paprastai yra šiek tiek lengviau išmokti. Perl 6, kai jis tampa prieinamas, bus įdomus vystymasis.

(Atkreipkite dėmesį, kad „Perl“ ir „Python“ „apžvalgos“, ypač, yra nepaprastai neišsamios, visoms knygoms galima parašyti šią temą.)

467
15 дек. Atsakymą davė Jonathan Leffler gruodžio 15 d. 2008-12-15 00:33 '08 0:33 2008-12-15 00:33

Įvaldę keliasdešimt kalbų, jūs pavargote nuo tokių žmonių kaip S. Lott (žr. Jo prieštaringą atsakymą į šį klausimą, beveik pusė balsų (+ 45 / -22) per šešerius metus po atsakymo).

Sed yra geriausias įrankis labai paprastoms komandinės eilutės vamzdynams. Sed kapitono rankose jis tinka vienkartiniams savavališkiems uždaviniams, tačiau jie neturėtų būti naudojami gamybos kode, išskyrus labai paprastus vamzdynus. Tokie dalykai kaip 's / this / that /.'

border=0

„Gawk“ (GNU awk) yra geriausias pasirinkimas sudėtingiems duomenų formatams, kai yra tik vienas įvesties šaltinis ir vienas išėjimas (arba keletas iš eilės išvesties sekų). Kadangi didžioji dalis tikro darbo atitinka šį aprašymą, o geras programuotojas gali mokytis dviejų valandų, tai yra geriausias pasirinkimas. Tai lengviau ir greičiau šioje planetoje!

Perl arba Python yra daug geriau nei bet kuri awk ar sed versija, kai turite labai sudėtingus I / O scenarijus. Kuo sudėtingesnė problema, tuo geriau naudojate „python“, atsižvelgiant į techninę priežiūrą ir įskaitomumą. Tačiau atkreipkite dėmesį, kad geras programuotojas gali rašyti skaitomą kodą bet kuria kalba, o blogas programuotojas gali parašyti nepasiekiamą šūdą bet kuria naudinga kalba, todėl programuotojo kvalifikacija ir protingumas gali būti saugiai paliktas programuotojo pasirinkimui.

78
25 мая '10 в 17:51 2010-05-25 17:51 atsakymą pateikė Charlie , gegužės 25 d. 10 d. 17:51 2010-05-25 17:51

Pirma, sąraše yra du nesusiję dalykai: „Perl, Python awk ir sed“.

1 dalykas - supaprastinti teksto apdorojimo įrankiai.

  • SED Ji turi fiksuotą, gana paprastą darbo sritį, apibrėžtą kiekvienos failo eilutės skaitymo ir tyrimo idėja. sed nėra suprantama. Jis sukurtas taip, kad būtų labai mažas ir labai efektyvus labai mažuose unix serveriuose.

  • Awk. Jis turi šiek tiek mažiau fiksuotą, mažiau paprastą darbo kiekį. Tačiau pagrindinė „awk“ programos kilpa nustatoma pagal netiesioginį šaltinio failo linijų skaitymą.

Tai nėra „pilnos“ programavimo kalbos. Nors su kai kuriais darbais galite rašyti gana sudėtingas awk programas, tai greitai tampa sudėtinga ir sunku skaityti.

2 dalykas - bendrosios paskirties kalbos. Jie turi daug įvairių operatorių tipų, daug įterptųjų duomenų struktūrų ir nėra susiję su laidinėmis prielaidomis ar etiketėmis.

  • Perl.

  • Python.

Kada juos naudoti.

  • SED Niekada. Šiuolaikinėje kompiuterių, turinčių daugiau nei 32 KB atmintį, laikais tai nėra svarbu. Perl arba Python tą patį daro aiškiau.

  • Awk. Niekada. Kaip ir sed, tai atspindi ankstesnę skaičiavimo erą. Vietoj to, kad palaikytų šią kalbą (be visų kitų, reikalingų sėkmingai sistemai), maloniau viską daryti vienoje malonioje kalboje.

  • Perl. Bet kokia programavimo problema. Jei jums patinka laisvai mąstanti sintaksė, kurioje yra daug įvairių būdų, kaip tai padaryti, perl yra įdomus.

  • Python. Bet kokia programavimo problema. Jei jums patinka gana ribota sintaksė, kur yra mažiau galimybių, mažiau subtilus ir (galbūt) daugiau aiškumo. „Python“ objekto pobūdis leidžia geriau pritaikyti didelėms sudėtingoms problemoms.

Fonas - nežinau sed ir awk dėl nežinojimo. Aš daugiau nei prieš 20 metų išmokau awk. Kiek buvo su juo; naudojamas kaip pagrindinis unix įgūdis. Su Perlu apie 15 metų sužinojau. Su juo yra daug sudėtingų dalykų. Aš palikau abu, nes galiu padaryti tą patį Python'e - ir tai yra paprastesnė ir aiškesnė.

Yra dvi rimtos problemos, susijusios su sed ir awk, kurių nė viena nėra jų amžius.

  • Jų įgyvendinimo trūkumas. Visi „sed“ ir „awk“ gali būti atliekami „Python“ arba „Perl“, dažnai paprasčiausiai ir kartais greičiau. Apvyniotas konteineris pasižymi tam tikrais privalumais dėl daugiafunkcinio apdorojimo. „Python“ siūlo subprocess modulį, kuris leidžia man atkurti šias išmokas.

  • Reikia mokytis kitos kalbos. Kai darote dalykus Python (arba Perl), jūsų įgyvendinimas priklauso nuo mažiau kalbų, todėl padidėja aiškumas.

22
15 дек. Atsakymą pateikė S.Lott, gruodžio 15 d. 2008-12-15 01:30 '08, 1:30, 2008-12-15 01:30

Nenorėčiau paskambinti visavertėmis programavimo kalbomis, tai yra srauto redaktorius su kalbos konstrukcijomis, skirtomis programiniam tekstinių failų redagavimui.

„Awk“ yra šiek tiek labiau bendrojo pobūdžio kalba, tačiau ji vis dar geriausiai tinka teksto apdorojimui.

Perl ir Python yra visavertės bendrojo naudojimo kalbos. Perl turi savo šaknis teksto apdorojime ir turi keletą „awk“ panašių konstrukcijų (tinkle yra netgi „awk-per-perl“ scenarijus). Yra daug skirtumų tarp „Perl“ ir „Python“, turbūt geriausia būtų perskaityti abiejų kalbų santraukas apie kažką panašaus į „Wikipedia“, kad gautumėte gerą idėją apie tai, ką jie yra.

19
15 дек. Robert Gamble atsakymas 15 d 2008-12-15 00:18 '08 0:18 2008-12-15 00:18

Kada juos naudoti: awk - never - S. Lott.

Manau, kad S. Lott truputį praleido šią rekomendaciją. Faktas yra tai, kad „Linux“ ir kitose „UNIX“ aplinkose „awk“ yra naudinga priemonė, kurią galite naudoti su „bash“, „sh“ ir „ksh“, kad būtų galima greitai apdoroti tekstą. Pati idėja sukurti scenarijus yra jūsų problemos sprendimas, suklijuojant šį įrankį, šį įrankį. Todėl admin scenarijuose paprastai yra ls, grep, |, awk, time, ps ir tt Kiekvienas iš jų yra įrankis, kurį scenarijaus variklis sujungia kaip plytų plytų, kad užbaigtų statybą (išspręsti šią problemą),

Pavyzdžiui, esu dotcom dot paintball komandos narys. Ši el. Prekybos svetainė yra pagrįsta LAMP stack. Automatiniam duomenų perdavimo kanalų apdorojimui ir normalizavimui iš skirtingų tiekėjų į duomenų bazę fone mes naudojame ir prižiūrime įvairų scenarijų derinį, įskaitant bash, perl, php ir netgi tikėtis. Kiekvienas iš jų turi savo pranašumų pagal turimus modulius ir API. „Bash“ scenarijuose, jei reikia, atliekame greitus šablonus ir atitinkamus šabloninius veiksmus, naudojant „awk“ be perjungimo į „PERL“. Vienas dalykas, kurį norėčiau pabrėžti ir kuris nebuvo pabrėžtas sraute, yra tai, kad teisingas šių scenarijų kiekis buvo nupirktas arba gautas iš atviro kodo. Jei scenarijus pasirodė kaip Perl, mes jį palaikome kaip Perl; jei scenarijus pasirodė kaip php, mes jį palaikome kaip php; jei jis buvo bash, mes jį palaikome kaip bash; mes ne perrašome ją kita kalba tik todėl, kad manome, kad jis yra mažiau veiksmingas originalo kalba.

10
13 апр. Atsakymas pateikiamas tao quam balandžio 13 d 2010-04-13 16:27 '10, 16:27, 2010-04-13 16:27

Kiti klausimai apie „ kalbos palyginimus arba „ Klauskite“