32 Stimmen

Alle Felder mit AWK getrennt durch OFS drucken

Gibt es eine Möglichkeit, alle durch die OFS getrennten Datensätze zu drucken, ohne jede einzelne Spaltennummer abzutippen?

#Desired style of syntax, undesired result
[kbrandt@glade: ~] echo "1 2 3 4" | gawk 'BEGIN { OFS=" :-( "}; {print $0}'        
1 2 3 4

#Desired result, undesired syntax
[kbrandt@glade: ~] echo "1 2 3 4" | gawk 'BEGIN { OFS=" :-) "}; {print $1,$2,$3,$4}'
1 :-) 2 :-) 3 :-) 4

46voto

German Garcia Punkte 1199

Dies ist eine Variante des ersten Stils:

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

Ergebnisse:

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

Erläuterung:

die $1=$1 besteht darin, den Datensatz unter Verwendung des aktuellen OFS neu zu erstellen (Sie können auch sehen http://www.gnu.org/software/gawk/manual/gawk.html#Changing-Fields )

Aktualisierung:

(vorgeschlagen von @EdMorton und @steve) Dies ist eine kürzere, äquivalente Version des awk-Befehls, die OFS in der Befehlszeile setzt und die Vorteile von print $0 als Standardaktion:

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

2voto

Fred Hicks Punkte 21

Sed-Äquivalent:

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

Hier ist eine weitere Möglichkeit mit awk:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X