<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行目が印刷されます。