電子書籍の厳選無料作品が豊富!

要は各種レポートのヘッダとフッターをカットしたいのですが、
テキストの「先頭n行目から後ろm行目まで」をとるにはどうしたらよいでしょうか?
たとえば、
テキストの「先頭3行目から後ろ5行目まで」をとるにはどうしたらよいでしょうか?

head -n 3 hogehoge.txt > 3.txt
これで先頭3行目をとれますが、このあとです。

A 回答 (9件)

> テキストの「先頭3行目から後ろ5行目まで」をとるにはどうしたらよいでしょうか?



私なら、こうするかな。

% echo '3,$-5p' | ed -s hogehoge.txt
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

大変すばらしいですね!
ここまでシンプルな回答があるとは思いませんでした!
感動しました。

今回は、これを採用させていただきます!
ありがとうございました。

お礼日時:2002/12/04 11:39

>% echo '3,$-5p' | ed -s hogehoge.txt



なるほど!
echoは知ってたけど、edは思いつきませんでした。
良いアイデアですね。
    • good
    • 0
この回答へのお礼

いろいろとありがとうございました。

お礼日時:2002/12/05 13:13

すでに ed を使ったエレガントな解が示されていますが,もう一度自分の回答を添削しておきます.



head -$(( `wc -l < sample.txt` - 8 )) sample.txt | tail +7

くどくてすみません.
    • good
    • 0
この回答へのお礼

いえいえ、ありがとうございます。

ついでに、他の方にも参考になるように解説させていただきます。

お題:ヘッダ 6行とフッダ8行を取り除く
回答:head -$(( `wc -l < sample.txt` - 8 )) sample.txt | tail +7
   wc -l sample.txt | sed s/sample.txt//
wcの結果でファイル名"sample.txt"が出力されてしまうのでそれを切り捨てしているのですね。
さらにこの部分は
   wc -l < sample.txt
とすることで、よりスマートになると。
(ありがとうございます!ほかで
   wc -l $source | cut -b 3-8
とやって切り捨ていたので使わせていただきます!)
それで、
   $(( `wc -l < sample.txt` - 8 ))
の部分が
   sample.txtの行数-8
と計算されて(sh系でないと動かないみたいですね)
   head -n sample.txt
のようになり、sample.txtの上からn行(ヘッダ+ボディ)が出力されると。 最後に
   head -n sample.txt | tail +7
で、7行目より下を出力する(ボディを取り除く)と。

 計算ができると知らなかったので、とても勉強になりました。
どうもありがとうございました!

お礼日時:2002/12/04 13:55

すみません.引用符が変でした(あれでも動きますが…)



head -$(( `wc -l sample.txt | sed s/sample.txt//` - 8 )) sample.txt | tail +7
    • good
    • 0
この回答へのお礼

どうもありがとうございます。
勉強に活用させていただきます。

お礼日時:2002/12/04 11:50

tac というのは初めて知りました.便利ですね.



これだけシンプルな解が示されているのに,あえて tac を使わないなら,
一応以下でできます.(泥くさいですが)
あ,bash 固有の機能を使ってます.tcsh とかなら無視して下さい.

ヘッダ 6行とフッダ8行を取り除く.

head -$(( `wc -l sample.txt | sed 's/sample.txt'//` - 8 )) sample.txt |tail +7

でも,この際 tac を含めて,gnu textutils をインストールしたらいかがでしょうか?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

こういった回答は応用的な勉強ができるので
大変参考になります!
どうもありがとうございます!

#残念ながら、あえて使わないのではなく、残念ながらインストールできないのですよ。。。
#お客さんの業務マシンなもので。

お礼日時:2002/12/04 11:36

>手元にはtacというコマンドがないのですが、これはどういうコマンドなのでしょうか?また、このコマンドをしようぜずに実現したいのですが、可能でしょうか?



tacコマンド入ってないでしょうか?
Linuxにはたいていあるのですが、他のUNIX系OSを使われているのでしょうか?

この回答への補足

何度も大変ありがとうございます。

残念ながら入っていませんし、入れることもできません。
OSはIBM AIXです。

補足日時:2002/12/04 10:03
    • good
    • 0

質問がわかりにくいのですが


テキストファイルの先頭3行と後ろ2行を取り出す場合は、

head -3 ファイル名 ; tail -2 ファイル名

でできると思います。こういう質問ですか?

この回答への補足

ご回答ありがとうございます。
大変失礼したしました。補足させていただきます。

レポートが「ヘッダ+ボディー+フッタ」で構成されているとします。
ヘッダとフッタを捨て、ボディーのみが欲しいのです。

よろしくお願いします。

補足日時:2002/12/04 09:48
    • good
    • 0

お詫び。



あとで質問をよく読み直したんですけど、

>ヘッダとフッターをカットしたいのですが、

ヘッダとフッターを切り捨てたいのではなく、
ヘッダとフッターを取り出してくっつけたいという質問ですね?
#1はその逆(中を取り出す方法)なのでまちがってました。

この回答への補足

大変申し訳ございません。
aix,FreeBSDのman,「UNIXの部屋」でtacを調べて載っていなかったので質問させていただいたのですが、教えていただいていましたね。大変申し訳ございません。早とちりしてしまいました。
また、再度「man tail」を実行したところ、オプションの説明ではなく、読み流していた本文に「+」についての記述を確認できました。大変すみませんでした。

目的のことは、教えていただいた
tail +3 ファイル名
でヘッダの切り捨てできました。
あとは、フッタを切り捨てたいのですが・・・。

よろしくお願いします。

補足日時:2002/12/04 09:47
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

すみません。「カットしたい」というのは「捨てたい」と言うことです。
日本語って難しいですね。(^^;
各種レポートのヘッダとフッターを捨てたいのです。
テキストの先頭n行目から後ろm行目までを取得したいのです。

「head -n 3 hogehoge.txt > 3.txt
これで先頭3行目をとれますが、このあとです。」
これは完全ボケていました。すみません。。。

手元にはtacというコマンドがないのですが、これはどういうコマンドなのでしょうか?また、このコマンドをしようぜずに実現したいのですが、可能でしょうか?

よろしくお願いします。

お礼日時:2002/12/04 09:22

たとえばテキストファイルの先頭2行と、後ろ3行を取り除くときは



tail +3 ファイル名 | tac | tail +4 | tac

こんな感じで処理してますが、こういう事がしたいのですか?

ちなみにtacはcatコマンドを反転して出力するコマンドです。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!