パターンに一致する各行の前にN行目のみを印刷します。

パターンに一致する各行の前にN行目のみを印刷します。

<N>検索パターンの前の行だけを印刷しようとしています。検索パターンの前のすべての行を印刷しますgrep -B<N><N>awkコードを見ました。ここ<N>検索パターン次の3行目のみ印刷できます。

awk 'c&&!--c;/pattern/{c=N}' file

<N>各行が一致する前に最初の行だけを印刷するように変更するにはどうすればよいですかpattern?たとえば、これは私の入力ファイルです。

...
...
   0.50007496  0.42473932  0.01527831
   0.99997456  0.97033575  0.44364198
Direct configuration=     1
   0.16929051  0.16544726  0.16608723
   0.16984300  0.16855274  0.50171112
...
...
   0.50089841  0.42608090  0.01499159
   0.99982054  0.97154975  0.44403547
Direct configuration=     2
   0.16931296  0.16553376  0.16600890
   0.16999941  0.16847055  0.50170694  
...

2nd line以前の検索文字列を返すコマンドが必要ですDirect configuration。これを実行しようとしています。SUSE Linux

ベストアンサー1

ラインバッファが必要です。

この試み:

awk -v N=4 -v pattern="example.*pattern" '{i=(1+(i%N));if (buffer[i]&& $0 ~ pattern) print buffer[i]; buffer[i]=$0;}' file

N印刷するパターンの前のN行目に値を設定してください。

pattern検索する正規表現に値を設定します。

buffer要素の配列ですN。行を保存するために使用されます。パターンが見つかるたびに、Nパターンの前の3行目が印刷されます。

おすすめ記事