プロが教えるわが家の防犯対策術!

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


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の限界をよく超えるので、それ以外の方法で考えています。


アドバイスよろしくお願いいたします。

A 回答 (2件)

grepではなくsedとかawkだと以下で実現出来ると思います。



$ sed -e 's/^.*,//' test.txt
$ awk -F, '{print $2}' test.txt
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
grepでマッチング確認した後、sedに入ろうと思ってましたが、
一足跳んで答えを教えて頂き、感謝です^^

^ 行頭から始まる
. 何か一文字が
* 0文字以上マッチングして
, カンマがある

という表現をすればいけるんですね。

テスト環境には明日昼にならないといけませんが試させて頂きます。


どうもありがとうございました。

お礼日時:2010/05/18 21:11

""じゃなく、''でくくれば変数として扱われなくはなりますが、


期待通りの結果は得られませんね。
awkをつかって
awk -F, '{print $2}' test.txt
とでもした方が楽じゃないでしょうか。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
そうですね、シングルクォーテーションでくくれば、展開されないですが、
うまくいきませんでした。

grepでできないのもわかってましたが、
まずマッチングができれば、sedでできるかなと考えてました。
最もsedもこれから書式を調べるところだったのですが、、、
まずは正規表現をうまくやることから、、と思い。

awkは、存在は知ってましたが、まだマニュアルの理解が大変で、、;;
sedを勉強したのちにやってみることにします。

お礼日時:2010/05/18 21:08

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!