• ベストアンサー

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

  • perlのシングルクォートとダブルクォートの置き換えについて

    perlのシングルクォートとダブルクォートの置き換えについて お世話になります。 現在、perlにて開発を行っているのですが、一つ問題に当たってしまいました。問題になっているのは、文字列を扱う部分です。perlにおいて文字列はシングルクォートに囲まれたものと、ダブルクォートに囲まれたものがあると思うのですが、この両者の違いは、内部に書かれた変数等を展開するか否かだったと思います。 実は開発の途中でこのシングルクォートで囲まれた文字列を、ダブルクォートに囲まれた文字列に変更しなければいけなくなりました。つまり $test = 'aaa';  を  $test = "aaa"; としたいのです。これってperlの仕様的に可能なのでしょうか? かなり悩んだのですが、どうしてもわかりませんでした。 ちなみに、なぜこの処理が必要なのかというと、HPの製作をしているのですが、設置したフォームからその内容を得るというプログラムを書いた際に、そのフォームの内容がシングルクォートでしか得られないからです。シングルだとそののちの処理に影響が出てしまうのです。 だれかご存じないでしょうか。よろしくおねがいします。

    • ベストアンサー
    • Perl
  • unix awkコマンド 複数区切り

    カンマ2つ(,,)+文字の抽出方法がわかりません・・・。 例: ファイル内(下記2行)に対して 12,34,,567@89 1,2,34,,567@89 1行目2行目ともに「567」が表示したいです。 # ”カンマ2つを一つの文字列”だけだと「awk -F",,"」でいけますが、+文字列がどうやってもできません。。

  • バッチファイルでの特殊文字列削除方法

    バッチファイルでの特殊文字列削除についてです。 count.txt "2011/05/23 11:54 xxxxxxxxxxxxxxx" の一行のみ格納してあります。 最初と最後の””(ダブルクオート) のみ削除し上書き保存したいです。 できれば外部ソフトを使わずにバッチ処理で解決したいです。 いろいろ調べましたがうまく削除できないため 教えていただきたいと思います。 よろしくお願いします。

  • 正規表現を使った文字列の抽出方法について

    正規表現を使った文字列の抽出方法について RHELを使っています。 テキストデータの中に、以下のようなデータが 百万行単位で並んでいます。(カンマ区切り、2列構成) 1, 1.24425 2, 3.25252 (中略) 13, 6.25365 14, 8,36222 (中略) 103633, 252525.0 最終的にやりたいことは2列目のデータのみの抽出です。 考え方として、正規表現で 「<任意の文字列の連続><カンマ>」という文字列を認識させ、 それを「空欄」で置換したいと考えています。 文字列の最後の文字をマッチさせる指定子が「$」という情報をWebで見つけたので まず、grepで見つけられるか以下のようにやってみたのですが、 grep -i ",$" test.txt $が環境変数と取られ、構文エラーとなってしまいます。 使い方がおかしいのでしょうか? ちなみに、うすうす感じている疑問として、「$」は文末にくるものしかマッチしなかったり しますでしょうか? カンマ区切りなので、表計算ソフトを使えなくもないですが、 行数がExcel2007の限界をよく超えるので、それ以外の方法で考えています。 アドバイスよろしくお願いいたします。

  • 文字列の削除

    char str[]="/home/name/file.c"; という文字列から"file.c"の部分を削除したいのですが どのようにすればできますでしょうか? 教えて下さい。お願いします。

  • awk等で特定文字列の抜き出し

    次のような文字列から特定の文字を抽出したいです。 「xxx,yyyyy,zz」 で、yyyyの部分のみをコマンドラインから抽出したいのですがどのようにしたらよいでしょうか? ためしに自分で考えたコマンドは以下の通りです。 % echo "xxx,yyyyy,zz" | awk '{print substr($0, 1, index($0, ","))}' で行うと最初の「,」でなりxしか抽出できません。 すみませんが、いい方法がありましたら教えて下さい。

  • Excelの置換機能で文字列の部分削除

    Excelの置換機能を使って、あるパターンの文字列の特定の部分のみ削除すると言うことは可能でしょうか? <文字列例> AB01234-56789 のハイフン以下(-56789)のみを削除したい 対象の文字列パターンは、最初の2桁がアルファベットで固定、そのあと数字が5桁(ユニーク)続き、ハイフン、その後ユニークな文字列(数字5桁) さらに言うと、ファイル内にはこのパターン以外の文字列も存在している(ハイフン含む)ので、上記のパターンの文字列のみをマッチングさせ、ハイフン以下を削除したいのです。 やはり、VBAとかで正規表現使わないと無理ですかね?? 数万件の大量のデータの中から上記処理をせねばならず困っております・・ ご教授いただけると幸いです。

  • 「,」が入った文字列に「"」が付いてしまう現象

    MySQLに大量データをload data infile~でインポートしようとしています。 下準備として、エクセルデータをタブ区切りデータに変換します。 そのときに、 カンマを使っている文字列の前後に、 ダブルクォーテーションが引っ付いてしまいます。 こんな感じ a,b,c,d,e   ↓ "a,b,c,d,e" 「"」を付けずにタブ区切りに出力する方法が知りたいです。。 *カンマは、どうしても使いたい文字です。 *実際に「"」をデータとして持っているので、 単に置換機能で削除するということはできません。 主に、エクセルの処理なのですが、同じ問題で詰まった経験者が居そうなこのカテゴリに質問させていただきました。 ご了承ください。 良い対処法をお持ちの方、よろしくお願いします。

    • ベストアンサー
    • MySQL
  • CSV出力について

    データベースから抽出したデータをカンマ区切りのCSVファイルにしたいと思います。 最終的に sCSVData = "りんご,みかん,オレンジ" のような形式です。 この場合、データにカンマが入ると列がずれてしまいます。 データをクオートすればいいのですが、 sCSVData = replace(sCSVData, ",", """,""") としたのですが、行頭と行末にカンマを入れれません。 どのようなコードを書けばよいのでしょうか。 ご教示よろしくお願いします。

  • 文字列内の記号、スペースなどを削除する方法

    エクセル2000 OS:WinXPpro 本人の技量レベル:VBAはコピペして実行しても、修正が出来ないので、なるべく関数で処理したい。 半角カタカナ英数だけの文字列を作りたいのです。 元のデータには()などの記号、句読点、スペース等が含まれています。 一応TRIM関数で余分なスペースは削除しましたが文字列中の半角スペースが残っています。 これを半角カタカナ英数だけを残してベタの文字列にしたいのです。

専門家に質問してみよう