我有一系列具有以下模式的代码块:
<div class="label label-primary">#1</div>
<!--A1_START-->
[code block]
<!--A1_END-->
块编号为1-44。然而,块#6已被删除,因此我需要减少块7-44中的数值。
如何使用awk修改相应的块?这里有几十个类似的问题,但我似乎无法修改它们中的任何一个来产生预期的结果。
答案 0 :(得分:5)
您可以使用“奇怪的”字段分隔符,这样数字就可以单独存在并准备好进行更改:
awk -v FS='<div class="label label-primary">#|</div>' '$2>7{sub($2, $2-1)}1' a
-v FS='<div class="label label-primary">#|</div>
将字段分隔符设置为<div class="label label-primary">#
或</div>
。这样,数字将是字段2($2
)。$2>7{sub($2, $2-1)}
以防$2
大于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>' '$2>7{sub($2, $2-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-->