30

各列番号を入力せずに、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
4

2 に答える 2

42

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

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

結果:

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

説明:

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

アップデート:

(@EdMortonと@steveによって提案されました)これは、コマンドラインでOFSを設定print $0し、デフォルトのアクションとして利用する、awkコマンドのより簡潔で同等のバージョンです。

awk -v OFS=" :-( " '{$1=$1}1'
于 2012-12-04T14:54:28.157 に答える
2

同等のsed:

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

awkの別のオプションは次のとおりです。

$ echo "1 2 3 4" | awk '{ gsub(/\s/, ":-)")}1' 
于 2014-09-21T22:10:11.603 に答える