AWKを使用して特定の行のコンテンツを印刷する方法

AWKを使用して特定の行のコンテンツを印刷する方法

文字列「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

おすすめ記事