- ベストアンサー
ファイルから特定の行を出力したい
あるファイルの特定の一行だけを取りだすunixの コマンドを教えて下さい。 具体的には cat a.txt 1gyoume 3gyoume 4gyoume 5gyoume 6gyoume 7gyoume 8gyoume といったファイルの末尾からX行目の内容を変数に入れたいのです。 a.txtが8行あると判断して8-X行目でファイルを分割、そのファイル をtailコマンドで末尾1行目だけ出力すると出来そうだと思ってい るのですがもっと簡単な方法はないでしょうか。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
簡単にということでしたら、こんなのはどうでしょうか。 $ sed -n 'X p' a.txt 例えば3行目を取り出したいなら、 $ sed -n '3 p' a.txt
その他の回答 (3)
- 11re
- ベストアンサー率50% (1/2)
daling_2004さんに補足ですが… a.txtのX行目の内容を変数VARに格納 $ VAR=`sed -n 'Xp' a.txt` ただし415さんは「末尾からX行目」を求めているようですので、Leanさんのようにtailを使い、 $ VAR=`tail -X a.txt | sed -n '1p' ` はいかがでしょう。
お礼
ありがとうございます。 色々方法がありどれにするか迷ってしまいます。 質問の答えに期待する以上の回答を頂けて大変勉強になりました。
- Lean
- ベストアンサー率72% (435/603)
補足です。 このカテゴリで質問しているという事は、使用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
お礼
ありがとうございます。 下の方法をヒントにこの方法で出来ることに気づきました。 親切にその方法まで教えていただいて大変ありがとうございます。 お礼が遅くなり申し訳ありませんでした。
- Lean
- ベストアンサー率72% (435/603)
tailコマンドで-rオプション(Reverse)が使用できるなら↓なのはどうでしょう。 % tail -r -n X a.txt | tail -n 1 ファイルの末尾から3行目なら % tail -r -n 3 a.txt | tail -n 1 もっと汎用的でスマートなのがあるかも知れませんが。
お礼
お礼が遅れ大変申し訳ありません。 ありがとうございます。意図通りの事が出来ました。 sedでそんなことが出来るとは勉強になりました。 他に色々出来そうなのでこれを機に使いこなすようにします。