Successivo: Operatori di assegnamento, Precedente: Operatori aritmetici, Su: Tutti gli operatori [Contenuti][Indice]
Allora ci era sembrata una buona idea.
C’è una sola operazione di stringa: la concatenazione. Non ha un operatore specifico per rappresentarla. Piuttosto, la concatenazione è effettuata scrivendo le espressioni l’una vicino all’altra, senza alcun operatore. Per esempio:
$ awk '{ print "Campo numero uno: " $1 }' mail-list -| Campo numero uno: Amelia -| Campo numero uno: Anthony …
Senza lo spazio nella costante stringa dopo ‘:’, la riga rimane unita. Per esempio:
$ awk '{ print "Campo numero uno:" $1 }' mail-list -| Campo numero uno:Amelia -| Campo numero uno:Anthony …
Poiché la concatenazione di stringhe non ha un operatore esplicito, è spesso
necessario assicurarsi che venga effettuata al momento giusto usando le
parentesi per racchiudere gli elementi da concatenare. Per esempio, ci si
potrebbe aspettare che il
seguente fammento di codice concateni nome
e file
:
nome = "nome" file = "file" print "qualcosa di significativo" > nome file
Questo produce un errore di sintassi in alcune versioni di
awk
per Unix.32
È necessario usare la seguente sintassi:
print "qualcosa di significativo" > (nome file)
Si dovrebbero usare le parentesi attorno alle concatenazioni in tutti i
contesti non comuni, come, per esempio, sul lato destro di ‘=’.
Bisogna stare attenti
al tipo di espressioni usate nella concatenazione di stringhe. In particolare,
l’ordine di valutazione di espressioni usate per la concatenazione non è
definita nel linguaggio awk
. Si consideri quest’esempio:
BEGIN { a = "Non" print (a " " (a = "v'allarmate")) }
Non è definito se il secondo assegnamento ad a
debba avvenire
prima o dopo il recupero del valore di a
per produrre il
valore concatenato. Il risultato potrebbe essere sia ‘Non v'allarmate’,
sia ‘v'allarmate v'allarmate’.
La precedenza della concatenazione, quando è in combinazione con altri operatori, è spesso controintuitiva. Si consideri questo esempio:
$ awk 'BEGIN { print -12 " " -24 }' -| -12-24
Quest’esempio, “ovviamente” concatena -12, uno spazio, e -24.
Ma dov’è finito lo spazio?
La risposta sta nella combinazione di precedenze di operatori e nelle regole di
conversione automatica di awk
. Per ottenere il risultato desiderato,
si deve scrivere il programma in questo modo:
$ awk 'BEGIN { print -12 " " (-24) }' -| -12 -24
Questo forza il trattamento, da parte di awk
, del ‘-’ del
‘-24’ come operatore unario. Altrimenti è analizzato in questo modo:
-12 (" "
- 24)
⇒ -12 (0 - 24)
⇒ -12 (-24)
⇒ -12-24
Come si è detto precedentemente, quando si usa la concatenazione insieme ad altri operatori, è necessario usare le parentesi. Altrimenti, non si può essere mai completamente certi di quel che si ottiene.
Può capitare che BWK awk
,
gawk
e mawk
lo interpretino nel modo giusto,
ma non ci si dovrebbe fare affidamento.
Successivo: Operatori di assegnamento, Precedente: Operatori aritmetici, Su: Tutti gli operatori [Contenuti][Indice]