文字列「clientside」が「n」行に見つかった場合は、「n-1」行の内容を印刷する必要があります。
/Partition/SSL_profile
たとえば、13行目で文字列を見つけた場合は、12行目の内容を印刷したいと思います。clientside
12: /Partition/SSL_profile
13: context clientside
ベストアンサー1
使用awk
:
clientside
これにより、一致する以前のレコードが印刷されます。 2番目のコマンドは、レコード番号と前のレコードを印刷します。
awk '/clientside/{ print prev;};{prev=$0}' file
awk '/clientside/{ printf "%s: %s\n", (NR-1), prev};{prev=$0}' file
これは現在の入力レコード()だけでなく古いレコードも印刷します$0
。
awk '/clientside/{ print prev; print $0};{prev=$0}' file
awk '/clientside/{ printf "%s: %s\n%s: %s\n", (NR-1), prev,NR,$0};{prev=$0}' file
clientside
一致する場合は、変数に保存されている古いレコードを印刷してから、prev
現在の入力レコード($0
)を印刷します。
ただし、このコマンドは重複した行を印刷します。
$ cat file
/Partition/SSL_profile
context1 clientside
context2 clientside
context3 clientside
上記のコマンドは、次の出力を提供します。
awk '/clientside/{ print prev; print $0};{prev=$0}' file
/Partition/SSL_profile
context1 clientside
context1 clientside
context2 clientside
context2 clientside
context3 clientside
したがって、重複した行を避けるためにコマンドをこれに変更する必要があります。
awk '/clientside/{ if(line!=prev_lineno) print prev; print $0; line=NR};
{prev=$0;prev_lineno=NR}' file