web-dev-qa-db-ja.com

開始行番号と終了行番号を指定して、ファイルから行の範囲を取得します

開始行番号と終了行番号を指定して、ファイルから設定された行数を抽出する必要があります。

UNIXでこれをすばやく行うにはどうすればよいですか(実際にはSolarisであるため、gnuフレーバーは使用できません)。

どうも

19
ScaryAardvark

6〜10行目を印刷するには:

sed -n '6,10p' file

ファイルが巨大で、行数に比べて終了行数が少ない場合は、次の方法でファイルを効率化できます。

sed -n '10q;6,10p' file

かなり多数の行を含むファイルのテストから:

$ wc -l test.txt 
368048 test.txt
$ du -k test.txt 
24640    test.txt
$ time sed -n '10q;6,10p' test.txt >/dev/null
real   0m0.005s
user   0m0.001s
sys    0m0.003s
$ time sed -n '6,10p' test.txt >/dev/null
real   0m0.123s
user   0m0.092s
sys    0m0.030s
44
Alok Singhal

私は splitter と呼ばれるHaskellプログラムを書きました。これはまさにこれを行います: 私のリリースブログ投稿を読んでください

このプログラムは次のように使用できます。

$ cat somefile | splitter 4,6-10,50-

これにより、4行目、6行目から10行目、50行目以降になります。そして、それがすべてです。それをインストールするにはHaskellが必要です。ただ:

$ cabal install splitter

これで完了です。このプログラムがお役に立てば幸いです。

1

または

head -n "$last" file | tail -n +"$first"
0
martinwguy

あなたもnawkでそれを行うことができます

#!/bin/sh
start=10
end=20
nawk -vs="$start" -ve="$end" 'NR>e{exit}NR>=s' file
0
ghostdog74