各列番号を入力せずに、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
これは最初のスタイルのバリエーションです:
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'
同等のSED:
$ echo "1 2 3 4" | sed 's/ /:-)/g'
Awkの別のオプションを次に示します。
$ echo "1 2 3 4" | awk '{ gsub(/\s/, ":-)")}1'