web-dev-qa-db-ja.com

OFSで区切られたAWKを持つすべてのフィールドを印刷する

各列番号を入力せずに、OFSで区切られたすべてのレコードを印刷する方法はありますか?.

#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
27
Kyle Brandt

これは最初のスタイルのバリエーションです:

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

結果:

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

説明:

$1=$1は、現在のOFSを使用してレコードを再構築することです(次も表示されます http://www.gnu.org/software/gawk/manual/gawk.html#Changing-Fields =)

更新:

(@EdMortonおよび@steveにより推奨)これは、awkコマンドの同等の簡単なバージョンであり、コマンドラインでOFSを設定し、デフォルトのアクションとしてprint $0を利用します。

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

同等のSED:

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

Awkの別のオプションを次に示します。

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