Domanda

  • Qual è la differenza tra awk e sed?
  • Che tipo di applicazione è meglio usare custodie per strumenti sed e awk?
È stato utile?

Soluzione

sed è un editor di stream. Funziona con flussi di caratteri su una base per riga. Ha un linguaggio di programmazione primitivo che include loop in stile goto e semplici condizionali (oltre alla corrispondenza dei modelli e alla corrispondenza degli indirizzi). Esistono essenzialmente solo due "variabili" spazio di modello e spazio di attesa. La leggibilità degli script può essere difficile. Le operazioni matematiche sono straordinariamente scomode nella migliore delle ipotesi.

Esistono varie versioni di sed con diversi livelli di supporto per le opzioni della riga di comando e le funzionalità della lingua.

awk è orientato verso i campi delimitati su una base per riga. Ha costrutti di programmazione molto più robusti tra cui if / else , while , do / mentre e per (stile C e iterazione di array). Esiste un supporto completo per variabili e matrici associative monodimensionali più matrici multidimensionali kludgey (IMO). Le operazioni matematiche assomigliano a quelle in C. Ha printf e funzioni. Il simbolo "K" in "AWK" sta per " K ernighan " come in "Kernighan e Ritchie" del libro "Linguaggio di programmazione C" fama (per non dimenticare A ho e W einberger). Si potrebbe presumibilmente scrivere un rivelatore di plagio accademico usando awk .

GNU awk ( gawk ) ha numerose estensioni, inclusi veri array multidimensionali nell'ultima versione. Esistono altre varianti di awk tra cui mawk e nawk .

Entrambi i programmi usano espressioni regolari per selezionare ed elaborare il testo.

Tendo a usare sed dove ci sono schemi nel testo. Ad esempio, potresti sostituire tutti i numeri negativi in ??alcuni testi che hanno il segno "meno-segno" seguito da una sequenza di cifre " (ad es. "-231.45") con le "parentesi del contabile". modulo (ad es. "231,45)" utilizzando questo (che ha margini di miglioramento):

sed 's/-\([0-9.]\+\)/(\1)/g' inputfile

Userei awk quando il testo assomiglia di più a righe e colonne o, come awk si riferisce a loro " records " e "campi". Se avessi fatto un'operazione simile come sopra, ma solo sul terzo campo in un semplice file delimitato da virgole potrei fare qualcosa del genere:

awk -F, 'BEGIN {OFS = ","} {gsub("-([0-9.]+)", "(" substr($3, 2) ")", $3); print}' inputfile

Naturalmente questi sono solo degli esempi molto semplici che non illustrano l'intera gamma di funzionalità che ognuno ha da offrire.

Altri suggerimenti

1) Qual è la differenza tra awk e sed?

Entrambi sono strumenti che trasformano il testo. MA Awk può fare più cose oltre a manipolare il testo. È un linguaggio di programmazione da solo con la maggior parte delle cose che impari in programmazione, come array, loop, controllo del flusso if / else ecc. Puoi " programmare " anche in sed, ma non vorrai mantenere il codice scritto in esso.

2) Quali tipi di applicazioni sono i casi di utilizzo migliori per gli strumenti sed e awk?

Conclusione: utilizzare sed per l'analisi del testo molto semplice. Qualunque cosa oltre a ciò, Awk è meglio. In effetti, puoi abbandonare del tutto sed e usare semplicemente awk. Poiché le loro funzioni si sovrappongono e awk può fare di più, basta usare awk. Ridurrai anche la tua curva di apprendimento.

Entrambi gli strumenti sono pensati per funzionare con il testo e ci sono attività per cui entrambi gli strumenti possono essere utilizzati.

Per me la regola per separarli è: Usa sed per automatizzare manualmente le attività che faresti altrimenti in un editor di testo. Ecco perché si chiama stream editor . (Puoi usare gli stessi comandi per modificare il testo in vim). Utilizzare awk se si desidera analizzare il testo, ovvero contare i campi, calcolare i totali, estrarre e riorganizzare le strutture ecc.

Inoltre non dovresti dimenticare grep . Usa grep se vuoi solo cercare / estrarre qualcosa in un testo (file)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top