nawk は理解するのが難しくなく、他の言語と同じです。適切にフォーマットされていないため、理解できないと思います。フォーマットすると、どのように機能するかがわかります。
あなたの質問に答えるために、このコマンドは、指定された入力ファイル内の入力テキストを含む行を検索し、一致した行の前に数行、一致した行の後に数行を出力します。印刷する行数は変数"b" (前の行数) と"a" (後の行数) によって制御され、検索する文字列/テキストは変数"s"を使用して渡されます。
このコマンドは、大きなサイズのログ ファイル (UNIX/LINUX の vi またはその他のエディターで開くのが難しい) から行を抽出したい場合のデバッグ/トラブルシューティングに役立ちます。 .
だからあなたのコマンドで
b=1 ## means print only 1 line before the matching line
a=19 ## means print 19 lines after the matching line
s="<Comment>Ericsson_OCS_V1_0.0.0.7" ## means search for this string
/var/opt/fds/config/ServiceConfig/ServiceConfig.cfg ## search in this file
/opt/temp/"$circle"_"$sdpid"_RG.cfg ## store the output in this file
フォーマットされたコマンドは以下のとおりです。フォーマットが解釈される前に c-->0 のように見えた最初の条件は、c-- 0 より大きいことを意味します。AWK の NR 変数は、入力ファイルで現在処理中の行の行番号を示します。処理されます。
nawk '
c-- > 0;
$0 ~ s
{
if(b)
for(c=b+1;c>1;c--)
print r[(NR-c+1)%b];
print;
c=a
}
b
{
r[NR%b]=$0
}' b=1 a=19 s="<Comment>Ericsson_OCS_V1_0.0.0.7" /var/opt/fds/config/ServiceConfig/ServiceConfig.cfg > /opt/temp/"$circle"_"$sdpid"_RG.cfg