voglio solo sapere quali sono le principali differenze tra loro? e la potenza di ogni lingua (dove è meglio usarla).
Modifica: non è "vs." come argomento, solo informazioni.
voglio solo sapere quali sono le principali differenze tra loro? e la potenza di ogni lingua (dove è meglio usarla).
Modifica: non è "vs." come argomento, solo informazioni.
Risposte:
In ordine di apparizione, le lingue sono sed
, awk
, perl
, python
.
Il sed
programma è un editor di stream ed è progettato per applicare le azioni da uno script a ciascuna riga (o, più in generale, a intervalli di righe specificati) del file o dei file di input. Il suo linguaggio è basato sull'editor ed
Unix e sebbene abbia condizionali e così via, è difficile lavorare con compiti complessi. Puoi fare piccoli miracoli con esso - ma a un costo per i capelli sulla tua testa. Tuttavia, è probabilmente il più veloce dei programmi quando si tenta di eseguire attività di sua competenza. (Ha le espressioni regolari meno potenti dei programmi discussi - adeguate per molti scopi, ma certamente non PCRE - Espressioni regolari compatibili Perl)
Il awk
programma (nome dalle iniziali dei suoi autori - Aho, Weinberger e Kernighan) è inizialmente uno strumento per la formattazione dei report. Può essere usato come un trito sed
; nelle sue versioni più recenti, è computazionalmente completo. Utilizza un'idea interessante: il programma si basa su "modelli corrispondenti" e "azioni intraprese quando il modello corrisponde". I modelli sono abbastanza potenti (espressioni regolari estese). Il linguaggio per le azioni è simile a C. Una delle caratteristiche principali di awk
è che divide automaticamente l'input in record e ogni record in campi.
Perl è stato scritto in parte come un killer e sed-killer. Due dei programmi forniti sono a2p
e s2p
per la conversione di awk
script e sed
script in Perl. Perl è uno dei primi della prossima generazione di linguaggi di scripting (Tcl / Tk può probabilmente rivendicare il primato). Ha una potente gestione integrata delle espressioni regolari con un linguaggio molto più potente. Fornisce l'accesso a quasi tutte le chiamate di sistema e ha l'estensibilità dei moduli CPAN. (Né awk
né sed
è estensibile.) Uno dei motti di Perl è "TMTOWTDI - C'è più di un modo per farlo" (pronunciato "tim-toady"). Perl ha "oggetti", ma è più un componente aggiuntivo che una parte fondamentale del linguaggio.
Python è stato scritto per ultimo, e probabilmente in parte come reazione a Perl. Ha alcune idee sintattiche interessanti (rientrare per indicare i livelli - senza parentesi graffe o equivalenti). È più orientato fondamentalmente agli oggetti di Perl; è estensibile come Perl.
OK - quando usarli?
Non sono a conoscenza di nulla che Perl possa fare che Python non può fare, né viceversa. La scelta tra i due dipenderebbe da altri fattori. Ho imparato il Perl prima che esistesse un Python, quindi tendo ad usarlo. Python ha una sintassi meno accentuata ed è generalmente un po 'più semplice da imparare. Perl 6, quando sarà disponibile, sarà uno sviluppo affascinante.
(Si noti che le "panoramiche" di Perl e Python, in particolare, sono terribilmente incomplete; interi libri potrebbero essere scritti sull'argomento.)
awk
nel corso sed
per l'apprendimento (anche se entrambi hanno ancora i loro usi). Per quanto riguarda le dimensioni dell'attività: sed
è al suo meglio quando elabora una riga alla volta, senza spazio di archiviazione da una riga all'altra. awk
viene spesso utilizzato per creare array associativi con i dati accumulati da tutte le fonti; utilizza più memoria ed è quindi molto più probabile che si verifichino problemi con set di dati di grandi dimensioni di quanto non lo sed
sia. Non ne ho sentito parlare tsawk
prima che ti collegassi ad esso. Tendo a ripiegare su Perl (ma potresti fare di meglio con Python) quando un compito è troppo per awk
.
Dopo aver imparato alcune decine di lingue, ti stanchi di persone come S. Lott (vedi la sua controversa risposta a questa domanda, quasi la metà del numero di voti negativi (+ 45 / -22) sei anni dopo aver risposto).
Sed è lo strumento migliore per pipeline a riga di comando estremamente semplici. Nelle mani di un maestro di sed, è adatto per una tantum di complessità arbitraria, ma non dovrebbe essere usato nel codice di produzione se non in condutture di sostituzione molto semplici. Cose come 's / this / that /.'
Gawk (GNU awk) è di gran lunga la scelta migliore per la riformattazione di dati complessi quando c'è solo una singola sorgente di input e un singolo output (o, più output scritti in sequenza). Poiché gran parte del lavoro del mondo reale è conforme a questa descrizione e un buon programmatore può imparare a gawk in due ore, è la scelta migliore. Su questo pianeta, più semplice e veloce è meglio!
Perl o Python sono di gran lunga migliori di qualsiasi versione di awk o sed quando si hanno scenari di input / output molto complessi. Più complesso è il problema, migliore è l'utilizzo di Python, dal punto di vista della manutenzione e della leggibilità. Si noti, tuttavia, che un buon programmatore può scrivere codice leggibile in qualsiasi lingua, e un cattivo programmatore può scrivere schifezze non mantenibili in qualsiasi lingua utile, quindi la scelta di perl o python può essere tranquillamente lasciata alle preferenze del programmatore se detto programmatore è abile e intelligente.
a?ⁿaⁿ
a a??ⁿaⁿ
quindi eseguilo in Perl 5 con un valore ⁿ
di 1.000.000, verrà eseguito in meno di due secondi. time perl -E '$x=1_000_000;$_="a"x$x;$m=("a??"x$x).("a"x$x);say $_=~$m'
Se esegui l'ingenuo, ci vogliono più di due secondi per uno ⁿ
di soli 25. La cosa che devi realizzare è che Perl ha più funzionalità regex di quelle più veloci, incluso consentire di avere il codice Perl all'interno del regex che altera ciò che corrisponde . Se lo desideri, puoi implementare un modulo che scambia il built-in con uno di quegli altri.
Non definirei sed un linguaggio di programmazione completo, è un editor di stream con costrutti di linguaggio volti a modificare i file di testo a livello di codice.
Awk è un po 'più di un linguaggio generico ma è ancora più adatto per l'elaborazione del testo.
Perl e Python sono linguaggi di programmazione generici a tutti gli effetti. Perl ha le sue radici nell'elaborazione del testo e ha una serie di costrutti simili a awk (esiste persino uno script da awk a perl che fluttua sulla rete). Ci sono molte differenze tra Perl e Python, la tua scommessa migliore è probabilmente quella di leggere i riassunti di entrambe le lingue su qualcosa come Wikipedia per avere una buona comprensione di ciò che sono.
Innanzitutto, ci sono due cose non correlate nella lista "Perl, Python awk e sed".
Cosa 1 - strumenti di manipolazione del testo semplicistici.
sed. Ha un ambito di lavoro fisso, relativamente semplice, definito dall'idea di leggere ed esaminare ogni riga di un file. sed non è progettato per essere particolarmente leggibile. È progettato per essere molto piccolo e molto efficiente su server unix molto piccoli.
awk. Ha un ambito di lavoro leggermente meno fisso, meno semplice. Tuttavia, il ciclo principale di un programma awk è definito dalla lettura implicita delle righe di un file sorgente.
Questi non sono linguaggi di programmazione "completi". Mentre puoi - con un po 'di lavoro - scrivere programmi abbastanza sofisticati in awk, diventa rapidamente complicato e difficile da leggere.
Cosa 2 - linguaggi di programmazione generici. Questi hanno una ricca varietà di tipi di istruzioni, numerose strutture di dati integrate e nessuna ipotesi cablata o scorciatoie di cui parlare.
Perl.
Pitone.
Quando usarli.
sed. Mai. In realtà non ha alcun valore nell'era moderna dei computer con oltre 32 KB di memoria. Perl o Python fanno le stesse cose in modo più chiaro.
awk. Mai. Come sed, riflette un'era precedente dell'informatica. Piuttosto che mantenere questa lingua (oltre a tutte le altre richieste per un sistema di successo), è più piacevole fare semplicemente tutto in una lingua piacevole.
Perl. Qualsiasi problema di programmazione di qualsiasi tipo. Se ti piace la sintassi del libero pensiero, dove ci sono molti, molti modi per fare la stessa cosa, perl è divertente.
Pitone. Qualsiasi problema di programmazione di qualsiasi tipo. Se ti piace la sintassi abbastanza limitata, dove ci sono meno scelte, meno sottigliezza e (forse) più chiarezza. La natura orientata agli oggetti di Python lo rende più adatto a problemi grandi e complessi.
Sfondo - Non sto prendendo a pugni sed e sbalordendo per ignoranza. Ho imparato awk oltre 20 anni fa. Ha fatto molte cose con esso; usato per insegnarlo come abilità unix di base. Ho imparato il Perl circa 15 anni fa. Ha fatto molte cose sofisticate con esso. Ho lasciato entrambi indietro perché posso fare le stesse cose in Python - ed è più semplice e più chiaro.
Ci sono due seri problemi con sed e awk, nessuno dei quali ha la loro età.
L'incompletezza della loro attuazione. Tutto ciò che sed e awk fanno possono essere fatti in Python o Perl, spesso più semplicemente e talvolta anche più velocemente. Una pipeline di shell presenta alcuni vantaggi in termini di prestazioni grazie alla sua multi-elaborazione. Python offre un subprocess
modulo per permettermi di recuperare quei vantaggi.
La necessità di imparare ancora un'altra lingua. Facendo cose in Python (o Perl) l'implementazione dipende da un minor numero di lingue, con un conseguente aumento della chiarezza.
Quando usarli: awk - mai - S. Lott.
Penso che S. Lott abbia leggermente mancato il segno con questa raccomandazione. Il fatto è che su Linux e gli altri ambienti UNIX, awk è uno strumento utile da usare con bash, sh e ksh per veloci elaborazioni di testo. L'idea dello scripting stesso è risolvere il tuo problema incollando insieme questo strumento, quello strumento. Quindi negli script di amministrazione, è comune avere ls, grep, |, awk, time, ps, ecc. Ognuno di essi è uno strumento che lo scripter combina come un costruttore mattone per mattone per completare l'edificio (per risolvere il problema a portata di mano) .
Ad esempio, sono un membro del team che gestisce le forniture di attrezzature per paintballpunto com. Questo sito di e-commerce si basa sullo stack LAMP. Per l'elaborazione automatizzata e la normalizzazione dei feed di dati da vari fornitori nel database di back-end, utilizziamo e manteniamo un mix diversificato di script, tra cui bash, perl, php e persino prevediamo. Ognuno ha i suoi punti di forza in base ai moduli e alle API disponibili. Negli script bash facciamo corrispondere schemi rapidi e azioni appropriate sugli schemi secondo necessità usando awk senza la necessità di passare a PERL. Una cosa che vorrei anche sottolineare, che non è stata sottolineata nel thread, è che un discreto numero di questi script è stato acquistato o ottenuto dall'open source. Se la sceneggiatura è arrivata come Perl, la manteniamo come Perl; se lo script è arrivato come Php, lo manteniamo come Php; se è venuto come bash, lo manteniamo come bash;
ls
, usa invece glob. leggi questo.