• ベストアンサー

AWKでの特殊文字の削除

今処理しているデータが以下の様なデータです。 name、 lower ’3e-3 このデータから必要な部分(1,3列目)を抽出することは簡単にできるのですが 1列目の文字列についている余分な”、”(カンマ)、3列目についている余分な’(シングルクォート)を削除する方法がよくわかりません。 どなたか教えていただけないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • trapezium
  • ベストアンサー率62% (276/442)
回答No.2

> 1列目の文字列についている余分な”、”(カンマ)、3列目についている余分な’(シングルクォート)を削除する方法がよくわかりません。 無条件なら gsub() すればいいですが、普通はこれを”、”(カンマ)’(シングルクォート)とはいいません。ASCII だと , と ' ですが、どっちの意味で使ってます? awk '{gsub(/[、’]/,""); print}' 実は , and ' なら awk '{gsub(/[,'\'']/,""); print}' 条件を限定するなら $1, $3 を個別に sub() 使えばいいでしょう。

Kasaoka-Taroh
質問者

お礼

なんとなくわかりました。試してみます。 ありがとうございました。

その他の回答 (3)

  • trapezium
  • ベストアンサー率62% (276/442)
回答No.4

> linuxは ”ed: オプションが違います -- E”と表示され > solarisは”sed: オプションが正しくありません -- E” sed の -E は BSD 由来なので、GNU sed の古い版だと -r がそれに相当します。最近のバージョンでは -i と共に相互の sed にも取り込まれているので、-E, -r どちらも使えます。 Solaris とか他の Unix など POSIX レベルでは -E, -r に相当するオプション自体ありません。互換性を考慮するなら -E を使わない古典的正規表現で済ますか、awk 内であれば -E 相当の正規表現で書けるので、sub(), gsub() するかどちらかです。

回答No.3

私のcentosではsedで動きました。動いたものを丸コピーしてます。 ディストリビューションによってオプション等異なるのかもしれません。 man sed してマニュアル見てください。

回答No.1

「,」と「’」が他に絶対入らないのであれば sedで置換しては? echo "name, lower ’3e-3"|sed -E 's/[,\’]//g'|awk ・・・・・

Kasaoka-Taroh
質問者

補足

早速の回答ありがとうございます。確かに、その方法でも特に問題はないので とりあえず echo "name, lower ’3e-3" | sed -E 's/[,\’]//g' を実行してみたのですが、うまく動作してくれません。 念のためlinuxとsolarisどちらも実行してみました。 linuxは ”ed: オプションが違います -- E”と表示され solarisは”sed: オプションが正しくありません -- E” と表示されてしまいました。

関連するQ&A