- ベストアンサー
AWKでの特殊文字の削除
今処理しているデータが以下の様なデータです。 name、 lower ’3e-3 このデータから必要な部分(1,3列目)を抽出することは簡単にできるのですが 1列目の文字列についている余分な”、”(カンマ)、3列目についている余分な’(シングルクォート)を削除する方法がよくわかりません。 どなたか教えていただけないでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
> 1列目の文字列についている余分な”、”(カンマ)、3列目についている余分な’(シングルクォート)を削除する方法がよくわかりません。 無条件なら gsub() すればいいですが、普通はこれを”、”(カンマ)’(シングルクォート)とはいいません。ASCII だと , と ' ですが、どっちの意味で使ってます? awk '{gsub(/[、’]/,""); print}' 実は , and ' なら awk '{gsub(/[,'\'']/,""); print}' 条件を限定するなら $1, $3 を個別に sub() 使えばいいでしょう。
その他の回答 (3)
- trapezium
- ベストアンサー率62% (276/442)
> 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() するかどちらかです。
- muuming2001
- ベストアンサー率23% (202/847)
私のcentosではsedで動きました。動いたものを丸コピーしてます。 ディストリビューションによってオプション等異なるのかもしれません。 man sed してマニュアル見てください。
- muuming2001
- ベストアンサー率23% (202/847)
「,」と「’」が他に絶対入らないのであれば sedで置換しては? echo "name, lower ’3e-3"|sed -E 's/[,\’]//g'|awk ・・・・・
補足
早速の回答ありがとうございます。確かに、その方法でも特に問題はないので とりあえず echo "name, lower ’3e-3" | sed -E 's/[,\’]//g' を実行してみたのですが、うまく動作してくれません。 念のためlinuxとsolarisどちらも実行してみました。 linuxは ”ed: オプションが違います -- E”と表示され solarisは”sed: オプションが正しくありません -- E” と表示されてしまいました。
お礼
なんとなくわかりました。試してみます。 ありがとうございました。