0

シェル スクリプトを使用して、grep コマンドで次の 2 つのオプションのいずれかを実行する方法を探しています。

a) grep コマンドを使用して、ファイル内の次の 10 行の一致を表示します。つまり、このコマンドgrep "pattern" file.txtは、そのパターンを持つファイルのすべての行になります。

patternrestoftheline

patternrestofanotherline

patternrestofanotherline

...

だから私はこれを探しています:

patternrestoftheline

following line

following line

...

until the tenth

patternrestofanotherline

following line

following line

...

until the tenth

b) grep コマンドを使用して、2 つのパターン内のすべての行を境界であるかのように表示します。

patternA restoftheline

anotherline

anotherline

...

patternB restoftheline

grep の代わりに別のコマンドがより適切なオプションであるかどうかはわかりません。私は現在、問題を解決するループを使用していますが、行単位であるため、非常に大きなファイルでは時間がかかりすぎます。

Solaris で動作するソリューションを探しています。助言がありますか?

4

2 に答える 2

1

(a) の場合、パターンが 10 行以内にある場合、何が起こると思いますか?

とにかく、動作するはずの awk スクリプトをいくつか示します (ただし、テストしていません。Solaris は持っていません)。

# pattern plus 10 lines
awk 'n{--n;print}/PATTERN/{if(n==0)print;n=10}'

# between two patterns
awk '/PATTERN1/,/PATTERN2/{print}'

2番目のものも同様に行うことができますsed

于 2013-05-24T17:46:44.073 に答える