Parsing AWK(或类似)-更改匹配图案下方的2行
我有一个我认为用awk最容易解决的问题,但我对此很在意。 在文件中,我有如下重复输出:Parsing AWK(或类似)-更改匹配图案下方的2行,parsing,awk,scripting,insert,Parsing,Awk,Scripting,Insert,我有一个我认为用awk最容易解决的问题,但我对此很在意。 在文件中,我有如下重复输出: .... Name="BgpIpv4RouteConfig_XXX"> <Ipv4NetworkBlock id="13726" StartIpList="x.y.z.t" PrefixLength="30" NetworkCount="10000" ... other output 然后,该块将重复 aI
....
Name="BgpIpv4RouteConfig_XXX">
<Ipv4NetworkBlock id="13726"
StartIpList="x.y.z.t"
PrefixLength="30"
NetworkCount="10000"
... other output
然后,该块将重复
aI希望在BGPIpv4Route.*上匹配,然后跳过2行awk的n关键字,然后在达到前缀长度时:
-或者用随机的25,30替换它
或
-更好,但我猜更难,没有想到要跟踪使用了什么,并在/25../30->first occurrence/25、second one/26…到/30之间循环,然后回滚到/25
b然后,根据PrefixCount的新值,使用NetworkCount的下一行将其计算为65536/2^32前缀计数
例如:如果此事件的PrefixCount替换为/25,则它后面一行的NetworkCount=65536/2^7=65536/128=512
我发现了一些例子,在匹配的一行之后插入/更改一行,或者在匹配的下面插入一个计数器变量X行,但是我对值生成部分和两行的更改(其中一行依赖于另一行)有点混淆。
我不确定我说的有什么道理……我的脑子里现在到处都是我发现的东西,有点不知所措
提前谢谢 这样就可以了
$ awk 'BEGIN {q="\""; FS=OFS="="; n=split("25=26=27=28=29=30",ps)}
/BgpIpv4Route/ {c=c%n+1}
/PrefixLength/ {$2=q ps[c] q}
/NetworkCount/ {$2=q 65536/2^(32-ps[c]) q}1' file
可能通过更改为2^ps[c]-16来最小化计算
如果有独立的PrefixLength和NetworkCount属性,您可能需要将它们限定为每个BgpIpv4Route上下文。谢谢!工作起来很有魅力。我不敢相信这是如此直截了当。我学到了一些新的东西。我现在在想…如果它找到了一个前缀长度条目而没有一个之前的BgpIpv4Route one,这也会引起变化,不是吗?是否有任何方法使其成为仅当其发现前缀长度和网络计数是BgpIpv4Route匹配后的第3行和第4行时才替换前缀长度和网络计数的约束条件?是的,使用上下文开关记录行号,并在模式匹配之外进行比较。