• ベストアンサー

テキストファイルから最後の単語を抜き取りたい

1行にスペースで区切られた複数の単語が入った数万行のテキストファイルがあります。 この行の最後の単語だけを抜き取って一つのファイルにしたいと思っています。  aaa bbb 123 abc123 ttt  2222 j ggg (aa) uuu sssss  hh  333 ddd ttt 例えば上のようなファイルなら  ttt  sssss  hh  ttt といった感じで。 awk,sed,perlなんかを使ってやろうかと思っているのですが、 最後の単語にマッチさせるような正規表現や手法がわからないでいます。 すみませんが、ヒントをいただけないでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

awkなら --------- print $NF --------- だけ。NFは組み込み変数。意味は調べてね。 sed,perlはわかんないや。rubyなら、 ARGF.each do |line|  ll=line.chomp!.split(" ")  print ll[ll.size-1],"\n" end とか。 >最後の単語にマッチさせる [^ ]*$ みたいな感じ?でも、マッチさせた物を どうやって変数に入れて、出力するのかわからん。

noname#41382
質問者

お礼

ご回答ありがとうございます! >awkなら >--------- >print $NF > できました!こんな変数があったんですね。 rubyは普段使わないのでまだ試していませんが、覚えてみたいものの1つです。 ありがとうございました。

その他の回答 (2)

  • nightowl
  • ベストアンサー率44% (490/1101)
回答No.3

こんばんは。 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:
http://oshiete1.goo.ne.jp/kotaeru.php3?q=725066
noname#41382
質問者

お礼

アドバイスありがとうございます。 参考URLも見させて頂きました。初心者の入り口には最適でした! 今後sed,awk,perlなどを使ったこういったテキストの編集をごりごりやりたいと思ってます。 rubyも是非覚えていきたいですね。 自分で勉強している分には、やりたい事までなかなかたどり着かないのですが、 ここで思いもつかない回答をいただくといっきにスキルがあがったような気になります^ ^;) みなさんありがとうございました!

  • HOGERA3
  • ベストアンサー率35% (50/139)
回答No.1

入力ファイル: file1 出力ファイル: file2 とすると、 perl -ne 'print $1 if /(\w+)$/' file1 > file2 でできるんじゃないでしょうか。

noname#41382
質問者

お礼

ありがとうございます! 素早い回答にびっくりです。 なるほど、(\w+)$ですか。 で、結果ですが、  tttssssshhttt となってしまいます...。 できれば1単語ごとに改行を入れたいのですが、何か手はあるでしょうか?

関連するQ&A