Per il fatto che quel codice non funzioni come previsto (e dando per scontato che tu abbia fatto prima di tutto una prova "copia e incolla" di quello che ho postato), oltre a quanto già detto, intravedo due possibili problemi entrambi legati al fatto che usiamo piattaforme diverse: la shell e/o awk.
Se invece di usare come input un file devi passare il testo da stdin si può usare la process substitution (evito le HereString che tu usi e con cui io ho spesso difficoltà)
Uso due diverse process substitution perchè ad awk devo dare la nozione di due stream successivi sui quali dovrà comportarsi diversamente.
Ho aggiunto la stampa delle righe immodificate.
Codice: Seleziona tutto
$ var=" SOSTITUTO "
$ testo="Pippo e Paperino
Pippo Und Paperino
Pippo e Gambadilegno
Topolino Und Paperino
Macchianera e Basettoni
Gambadilegno o Trudy
Gambadilegno e Trudy
Paperon de' Paperoni Und Banda Bassotti
Paperon de' Paperoni e Banda Bassotti
Pippo o Paperino
Qui, Quo, Qua Und Archimede Pitagorico
Qui, Quo, Qua e Archimede Pitagorico"
$
$ awk -v var="$var" -F " e | Und " 'FNR==NR && / e | Und /{a[$0]=$0; cnt[$1$2]++ ;next} {if ($0 in a && cnt[$1$2]>1) {print $1 var $2} else {print}}' <(echo "$testo") <(echo "$testo")
Gambadilegno o Trudy
Pippo o Paperino
Pippo SOSTITUTO Paperino
Pippo SOSTITUTO Paperino
Pippo e Gambadilegno
Topolino Und Paperino
Macchianera e Basettoni
Gambadilegno o Trudy
Gambadilegno e Trudy
Paperon de' Paperoni SOSTITUTO Banda Bassotti
Paperon de' Paperoni SOSTITUTO Banda Bassotti
Pippo o Paperino
Qui, Quo, Qua SOSTITUTO Archimede Pitagorico
Qui, Quo, Qua SOSTITUTO Archimede Pitagorico
$
Il fatto è che non so se questa process substitution sia supportata nella shell del Mac (zsh?); se ancora hai difficoltà a fare funzionare quel codice, fai una prova così:
Codice: Seleziona tutto
$ awk 'FNR==NR {print $1; next}{print $2}' <(echo "$testo") <(echo "$testo")
Pippo
Pippo
Pippo
Topolino
Macchianera
Gambadilegno
Gambadilegno
Paperon
Paperon
Pippo
Qui,
Qui,
e
Und
e
Und
e
o
e
de'
de'
o
Quo,
Quo,
se così ottieni lo stesso mio output vuol dire che l'eventuale problema non sta nella shell