次のawkコマンドを繰り返す最善の方法

次のawkコマンドを繰り返す最善の方法

私は次のawkステートメントを持っています

awk '/^string$/{i=1;next} i && i++ <= 2' file

その後、文字列を検索して2行を印刷します。

例えば

$ cat file
string
aaa
bbb
ccc

$ awk '/^string$/{i=1;next} i && i++ <= 2' file
$ bbb

私がしたいのは、2をカウンタに変更して毎回10行を繰り返すことです。例えば

for i in {1..5}
do
   awk '/^111$/{i=1;next} i && i++ <= $i' file
done

もちろんこれはうまくいきません。コマンドがループにカプセル化されているため、可能であるかどうかはわかりません。

ちなみに、私がやりたいことは、設定ファイル(file.cfg)の[header]値を調べて、その変数が有効になっているか(変数=有効にする)ことです。

例えば

cat file.cfg
[header]
# nothing
variable = enabled

私の考えでは、コア属性は[header]が決定されていない行(おそらく1行目、おそらく122行目)にあることです。

そして、変数が常に[header]の後ろの2行目にあるわけではありません。一部の人は変数を7桁に置くことも、他の人は2桁に配置することもできます。

これが意味があることを願っております。

ベストアンサー1

[header]構成ファイルを 1 行ずつ作成した場合は、以下を使用variable=valueして特定のセクションのすべての値を取得できます。

sed -n '/^\[header\]/,/^\[/p' /path/to/file.cfg|grep -vE '?\s?[;#]'

このセクションでは、対応する文字で始まり、次の行までのすべてのsed行をフィルタリングします。このコマンドは、またはで始まる行をフィルタリングします。[header][grep;#

代わりにsedを使用できますawk。質問に対する以前の回答に基づいてhttps://stackoverflow.com/questions/17988756/how-to-select-lines-Between-two-marker-patterns-which-may-occurr-multiple-times-w:

awk '/\[header\]/{print; flag=1; next}/\[/{flag=0}flag' file.cfg

grepコメント行をフィルタリングするには、上記のコマンドを追加します。

おすすめ記事