- ベストアンサー
awkでデリミタを変更したいです。
以下のファイルtestを 1111:2222:3333:4444 5555:6666:7777:8888 ↓ 1111,2222,3333,4444 5555,6666,7777,8888 にしてみたいです。 awk -F":" 'BEGIN{OFS=","}{ print }' test などとためしてみたのですがうまくいきません。 ご教示下さい。内容はsedですぐできるんですね、、。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#1の方の回答でキマリなんですが、 > awk -F":" 'BEGIN{OFS=","}{ print }' test > などとためしてみたのですがうまくいきません。 ちょと解説を。 OFSを設定するのは悪くないです。 問題は、OFSが使われるのは print $1, $2, $3 のようにしたときに、各要素の間になにを挟むのか ということに対してです。 print としたときに出力対象になるのは $0 です。 そしてそれは読んできたレコードそのものです。 #ここまでがうまく行かなかったわけ ところで、$0(や他の$数字のフィールド)を変更すると、 「レコードの再構築」ということが行われます。 このとき、レコード中のフィールドを区切るものとして OFSが使われるのです。 大抵のawkでは #1の例にあるように $1 = $1 で 上記のレコードの再構築が行われますが、 たまーに、これだとフィールドの変更だと みなしてくれないawkがありますのでご注意ください。
お礼
ありがとうございます。 とてもわかりやすかったです。