L’espressione / inizio /, / fine / intervallo è sempre utile in awk?

Ho sempre sostenuto che non dovresti mai usare un’espressione di intervallo come:

/start/,/end/ 

in awk perché anche se rende banale il caso in cui si desidera stampare solo il testo corrispondente, comprese le linee di inizio e fine leggermente più brevi rispetto all’alternativa *:

 /start/{f=1} f{print; if (/end/) f=0} 

quando vuoi modificarlo leggermente per fare qualsiasi altra cosa, richiede una completa riscrittura o risultati in codice duplicato o altrimenti indesiderato. ad esempio, se vuoi stampare il testo corrispondente escludendo i delimitatori di intervallo usando il secondo modulo sopra, lo modificherai per spostare i componenti intorno:

 f{if (/end/) f=0; else print} /start/{f=1} 

ma se hai iniziato con /start/,/end/ avresti bisogno di abbandonare questo approccio in favore di ciò che ho appena postato o dovresti scrivere qualcosa come:

 /start/,/end/{ if (!/start|end/) print } 

cioè duplicare le condizioni che è indesiderabile.

Poi ho visto una domanda postata che richiedeva di identificare l’ULTIMA end in un file e dove è stata usata un’espressione di intervallo nella soluzione e ho pensato che potesse sembrare un valore (vedi https://stackoverflow.com/a/21145009/ 1745001 ).

Ora, però, torno a pensare che non vale la pena preoccuparsi delle espressioni di intervallo e una soluzione che non usa le espressioni di intervallo avrebbe funzionato altrettanto bene in quel caso.

Quindi, qualcuno ha un esempio in cui un’espressione di intervallo aggiunge effettivamente un valore notevole a una soluzione?

* Ero solito usare:

 /start/{f=1} f; /end/{f=0} 

ma troppe volte ho scoperto che dovevo fare qualcosa di aggiuntivo quando f è vero e /end/ è trovato (o per dirla in un altro modo SOLO fare qualcosa quando /end/ è trovato SE f erano vere) quindi ora provo solo a incollare leggermente meno breve ma molto più robusto ed estendibile:

 /start/{f=1} f{print; if (/end/) f=0}