2012-12-04 13 views

risposta

26

Questa è una variante del primo stile:

echo "1 2 3 4" | gawk 'BEGIN { OFS=" :-("}; {$1=$1; print $0}' 

Risultati:

1 :-(2 :-(3 :-(4 

Spiegazione:

il $1=$1 è di ricostruire il record, utilizzando l'OFS corrente (puoi anche vedere http://www.gnu.org/software/gawk/manual/gawk.html#Changing-Fields)

Aggiornamento:

(suggerito da @EdMorton e @steve) Questo è un breve, la versione equivalente del comando awk, che imposta OFS nella riga di comando, e sfrutta print $0 come azione predefinita:

awk -v OFS=" :-(" '{$1=$1}1' 
+5

Perfetto, tranne che dovrebbe essere facce felici perché funziona ;-) –

+0

Questa è una buona obiezione :) Saluti –

+0

nota @steve: c'era una modifica che sostituiva il blocco '{$ 1 = $ 1; stampa $ 0} 'con solo' $ 1 = $ 1'. Ciò fallirebbe per $ 1 == 0. –

2

Sed equivalente:

$ echo "1 2 3 4" | sed 's/ /:-)/g' 

Ecco un'altra opzione con awk:

$ echo "1 2 3 4" | awk '{ gsub(/\s/, ":-)")}1' 
+0

Benvenuto in SO! domanda su awk in modo specifico, quindi una risposta usando sed è fuori luogo qui. – cfi

+0

Penso che tu dovresti leggere "sed 's// :-)/g'' se si nota, l'OP aveva uno spazio intorno allo smiley in l'OFS – v010dya

Problemi correlati