使用 AWK 增加数字

Increment Number with AWK

我有一系列具有以下模式的代码块:

<div class="label label-primary">#1</div>
<!--A1_START-->

  [code block]

<!--A1_END-->

块编号为 1-44。但是,块 #6 已被删除,因此我需要块 7-44 中的数值递减。

如何使用 awk 修改适当的块? SO 上有许多类似的问题,但我似乎无法修改其中任何一个以产生所需的结果。

您可以使用 "strange" 字段分隔符,这样数字就可以单独放置并随时可以更改:

awk -v FS='<div class="label label-primary">#|</div>' '>7{sub(, -1)}1' a

说明

  • -v FS='<div class="label label-primary">#|</div> 将字段分隔符设置为 <div class="label label-primary">#</div>。这样,数字将是字段 2 (</code>).</li> <li><code>>7{sub(, -1)} 如果 </code> 大于 <code>7,则将其替换为自身减 1。
  • 1 因为它被评估为 True,它执行默认的 awk 操作:打印当前记录(行)。

测试

$ cat a
<div class="label label-primary">#1</div>
<!--A1_START-->

  [code block]

<!--A1_END-->

<div class="label label-primary">#2</div>
<!--A1_START-->

  [code block]

<!--A1_END-->

<div class="label label-primary">#10</div>
<!--A1_START-->

  [code block]

<!--A1_END-->

让我们运行它:

$ awk -v FS='<div class="label label-primary">#|</div>' '>7{sub(, -1)}1' a
<div class="label label-primary">#1</div>
<!--A1_START-->

  [code block]

<!--A1_END-->

<div class="label label-primary">#2</div>
<!--A1_START-->

  [code block]

<!--A1_END-->

<div class="label label-primary">#9</div>  # <--- 10 is now 9
<!--A1_START-->

  [code block]

<!--A1_END-->