WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:データの抜き出し for perl&awk

0:[投稿] ROM-X [2004/02/25 10:24 ][環境: ]

いつもお世話になっています。

入力データ:data.txt(内容は以下の2行)

aaa xxxyyy bbb
aaa xxx yyy bbb

出力データ:標準出力

xxxyyy
xxx yyy

条件:一行コマンドでやりたい

とりあえず、以下で出来たのですが、もっとスマートに出来ますか?

perl -e "while(<STDIN>){$_=~/aaa (.*) bbb/;print \"$1\n\"}" < data.txt

あと、awkでの一行コマンドで、上記は実現可能でしょうか?


1:[回答] ROM-X [2004/02/25 10:55 ]

unixだとなぜか上記はエラー、以下だと大丈夫。

perl -e 'while(<STDIN>){if($_=~/aaa (.*) bbb/){print "$1\n"
}}' < data.txt


2:[回答] 通りすがり [2004/02/25 15:35 ]

perl -lpe "s/aaa (.*) bbb/\1/" data.txt


3:[回答] ROM-X [2004/02/25 17:00 ]

>>2
ありがとうございます。
ネットでオプション調べて、理解できまた。

しかし、実は、data.txtはもうちょっと複雑なデータの入り方になります。(はしょりすぎました。すみません)

aaa xxxyyy bbb
aaa xxx yyy bbb
aaa xxxyyy bbb cccc dddd
111111 2222 333 444
aaa xxx yyy bbb ffff ggggggg


4:[回答] 古のもの [2004/02/25 23:17 ]

% sed -n -e 's/^.*aaa \(.*\) bbb.*$/\1/p' data.txt
とかでもいいのかしらん。


5:[回答] ROM-X [2004/02/25 23:25 ]

>>4
ありがとうございます。
明日、会社で試してみます。


6:[完了] ROM-X [2004/02/27 11:55 ]

>>4
OKでした。
ありがとうございました。
スクリプトも理解できました。

-nでデフォルト出力抑制。
-eでスクリプト。(今回はスクリプトが一つなので、このオプションは、なくてもOK)
お尻のpで正規表現でマッチした行が表示対象になり、\1で置換したところが表示される。

尚、awkでの一行コマンドは無理っぽいですね。
理由は、後方参照の\1〜\9がperlみたいに$1〜$9対応しておらず、
awkの$1〜$9は、後方参照ではなくあくまでも、フィールドに対応になる。

とりあえず、完了いたします。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World