- ベストアンサー
テキストファイルから最後の単語を抜き取りたい
1行にスペースで区切られた複数の単語が入った数万行のテキストファイルがあります。 この行の最後の単語だけを抜き取って一つのファイルにしたいと思っています。 aaa bbb 123 abc123 ttt 2222 j ggg (aa) uuu sssss hh 333 ddd ttt 例えば上のようなファイルなら ttt sssss hh ttt といった感じで。 awk,sed,perlなんかを使ってやろうかと思っているのですが、 最後の単語にマッチさせるような正規表現や手法がわからないでいます。 すみませんが、ヒントをいただけないでしょうか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
awkなら --------- print $NF --------- だけ。NFは組み込み変数。意味は調べてね。 sed,perlはわかんないや。rubyなら、 ARGF.each do |line| ll=line.chomp!.split(" ") print ll[ll.size-1],"\n" end とか。 >最後の単語にマッチさせる [^ ]*$ みたいな感じ?でも、マッチさせた物を どうやって変数に入れて、出力するのかわからん。
その他の回答 (2)
- nightowl
- ベストアンサー率44% (490/1101)
こんばんは。 Ruby と聞いて黙っちゃいられずのこのこ出てまいりました。 Ruby の別解として、ワンライナー(一行野郎)のご紹介です。 ruby -ane 'puts $F[-1]' file 配列(Array オブジェクト)の添え字として -1 を指定すると 最後の要素を取り出すことができます。 Ruby(や Perl)のオートスプリットモードについては 参考 URL をご覧ください。 sed ではめんどくさいんですがこうなるでしょうか。 sed 's/.* *\([^ ][^ ]*\)$/\1/' file ~~(空白2個です) 僭越ながら、HOGERA3 さんのは「print $1」の代わりに 「print "$1\n"」を使うとうまくいくでしょう。
お礼
アドバイスありがとうございます。 参考URLも見させて頂きました。初心者の入り口には最適でした! 今後sed,awk,perlなどを使ったこういったテキストの編集をごりごりやりたいと思ってます。 rubyも是非覚えていきたいですね。 自分で勉強している分には、やりたい事までなかなかたどり着かないのですが、 ここで思いもつかない回答をいただくといっきにスキルがあがったような気になります^ ^;) みなさんありがとうございました!
- HOGERA3
- ベストアンサー率35% (50/139)
入力ファイル: file1 出力ファイル: file2 とすると、 perl -ne 'print $1 if /(\w+)$/' file1 > file2 でできるんじゃないでしょうか。
お礼
ありがとうございます! 素早い回答にびっくりです。 なるほど、(\w+)$ですか。 で、結果ですが、 tttssssshhttt となってしまいます...。 できれば1単語ごとに改行を入れたいのですが、何か手はあるでしょうか?
お礼
ご回答ありがとうございます! >awkなら >--------- >print $NF > できました!こんな変数があったんですね。 rubyは普段使わないのでまだ試していませんが、覚えてみたいものの1つです。 ありがとうございました。