こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

あるファイルの特定の一行だけを取りだすunixの
コマンドを教えて下さい。

具体的には

cat a.txt
1gyoume
3gyoume
4gyoume
5gyoume
6gyoume
7gyoume
8gyoume

といったファイルの末尾からX行目の内容を変数に入れたいのです。
a.txtが8行あると判断して8-X行目でファイルを分割、そのファイル
をtailコマンドで末尾1行目だけ出力すると出来そうだと思ってい
るのですがもっと簡単な方法はないでしょうか。

投稿日時 - 2005-03-03 00:10:06

QNo.1247504

415

困ってます

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

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

投稿日時 - 2005-03-03 12:02:16

お礼

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

投稿日時 - 2005-03-20 22:25:57

このQ&Aは役に立ちましたか?

6人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.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' `

はいかがでしょう。

投稿日時 - 2005-03-19 00:37:42

お礼

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

投稿日時 - 2005-03-20 22:30:44

ANo.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

投稿日時 - 2005-03-03 13:20:46

お礼

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

投稿日時 - 2005-03-20 22:28:17

ANo.2

tailコマンドで-rオプション(Reverse)が使用できるなら↓なのはどうでしょう。

% tail -r -n X a.txt | tail -n 1

ファイルの末尾から3行目なら

% tail -r -n 3 a.txt | tail -n 1

もっと汎用的でスマートなのがあるかも知れませんが。

投稿日時 - 2005-03-03 13:02:05

あなたにオススメの質問