• ベストアンサー

ファイルから特定の行を出力したい

あるファイルの特定の一行だけを取りだすunixの コマンドを教えて下さい。 具体的には cat a.txt 1gyoume 3gyoume 4gyoume 5gyoume 6gyoume 7gyoume 8gyoume といったファイルの末尾からX行目の内容を変数に入れたいのです。 a.txtが8行あると判断して8-X行目でファイルを分割、そのファイル をtailコマンドで末尾1行目だけ出力すると出来そうだと思ってい るのですがもっと簡単な方法はないでしょうか。

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

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

簡単にということでしたら、こんなのはどうでしょうか。 $ sed -n 'X p' a.txt 例えば3行目を取り出したいなら、 $ sed -n '3 p' a.txt

415
質問者

お礼

お礼が遅れ大変申し訳ありません。 ありがとうございます。意図通りの事が出来ました。 sedでそんなことが出来るとは勉強になりました。 他に色々出来そうなのでこれを機に使いこなすようにします。

その他の回答 (3)

  • 11re
  • ベストアンサー率50% (1/2)
回答No.4

daling_2004さんに補足ですが… a.txtのX行目の内容を変数VARに格納  $ VAR=`sed -n 'Xp' a.txt` ただし415さんは「末尾からX行目」を求めているようですので、Leanさんのようにtailを使い、    $ VAR=`tail -X a.txt | sed -n '1p' ` はいかがでしょう。

415
質問者

お礼

ありがとうございます。 色々方法がありどれにするか迷ってしまいます。 質問の答えに期待する以上の回答を頂けて大変勉強になりました。

  • Lean
  • ベストアンサー率72% (435/603)
回答No.3

補足です。 このカテゴリで質問しているという事は、使用OSはSolarisという事でいいですか? もしtailコマンドが/usr/bin/tail(SUNWcsu)だとNo.2のオプション指定ではたぶんダメですね。 /usr/xpg4/bin/tail(SUNWxcu4)の場合だと大丈夫なようですが。 /usr/bin/tailの場合は↓のような感じになりますね。 % tail -Xlr a.txt | tail -1l ファイルの末尾から3行目なら % tail -3lr a.txt | tail -1l

参考URL:
http://docs.sun.com/app/docs/doc/817-7410/6mmnue1dd?l=ja&a=view
415
質問者

お礼

ありがとうございます。 下の方法をヒントにこの方法で出来ることに気づきました。 親切にその方法まで教えていただいて大変ありがとうございます。 お礼が遅くなり申し訳ありませんでした。

  • Lean
  • ベストアンサー率72% (435/603)
回答No.2

tailコマンドで-rオプション(Reverse)が使用できるなら↓なのはどうでしょう。 % tail -r -n X a.txt | tail -n 1 ファイルの末尾から3行目なら % tail -r -n 3 a.txt | tail -n 1 もっと汎用的でスマートなのがあるかも知れませんが。

関連するQ&A