首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重复nth号,直到第n次匹配,同时使用awk sub在模式上前缀这些数字。

重复nth号,直到第n次匹配,同时使用awk sub在模式上前缀这些数字。
EN

Stack Overflow用户
提问于 2021-10-31 00:03:09
回答 3查看 109关注 0票数 0

下面的文件包含15 times字符串.dog。通常,当我想在字符串中添加用于计数的数字时,我使用awk '/\.dog/{sub(".dog",++count"&")} 1',并且使用这个命令的一些变体,就像在这个问题awk sub ++count every 4 matches unlike every 1 match中一样。

代码语言:javascript
复制
 [.dog]
-house
[.cat]
-kitchen
[.dog]
-house
[.cat]
-kitchen
[.dog]
-house
[.cat]
-kitchen
[.dog]
-house
[.cat]
-kitchen
[.dog]
-house
[.cat]
-kitchen
[.dog]
-house
[.cat]
-kitchen
[.dog]
-house
[.cat]
-kitchen
[.dog]
-house
[.cat]
-kitchen
[.dog]
-house
[.cat]
-kitchen
[.dog]
-house
[.cat]
-kitchen
[.dog]
-house
[.cat]
-kitchen
[.dog]
-house
[.cat]
-kitchen
[.dog]
-house
[.cat]
-kitchen
[.dog]
-house
[.cat]
-kitchen
[.dog]

此时,我不得不做不同的事情,在第n次比赛中附加一个唯一的第n个数字,也就是说,每个第n个数字(1、2、3等)。一直重复到第n个matc_h。假设我希望它是我的模式,直到.dog的_5第n次匹配时,awk.. gsub.. count命令重复1,同时附加一个数字。所以我的产出应该是:

代码语言:javascript
复制
[1.dog]
-house
[.cat]
-kitchen
[1.dog]
-house
[.cat]
-kitchen
[1.dog]
-house
[.cat]
-kitchen
[1.dog]
-house
[.cat]
-kitchen
[1.dog]
-house
[.cat]
-kitchen
[2.dog]
-house
[.cat]
-kitchen
[2.dog]
-house
[.cat]
-kitchen
[2.dog]
-house
[.cat]
-kitchen
[2.dog]
-house
[.cat]
-kitchen
[2.dog]
-house
[.cat]
-kitchen
[3.dog]
-house
[.cat]
-kitchen
[3.dog]
-house
[.cat]
-kitchen
[3.dog]
-house
[.cat]
-kitchen
[3.dog]
-house
[.cat]
-kitchen
[3.dog]

我一直在寻找一个解决方案,但我没有找到,我相信这个解决方案可以再次操作和适应awk '/\.dog/{sub(".dog",++count"&")} 1 | <at the every 5 matches> ',但我仍然不确定。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-10-31 03:53:53

代码语言:javascript
复制
$ awk '$0=="[.dog]"{ if (++cnt % 5 == 1) idx++; sub(/\./,idx".") } 1' file
[1.dog]
-house
[.cat]
-kitchen
[1.dog]
-house
[.cat]
-kitchen
[1.dog]
-house
[.cat]
-kitchen
[1.dog]
-house
[.cat]
-kitchen
[1.dog]
-house
[.cat]
-kitchen
[2.dog]
-house
[.cat]
-kitchen
[2.dog]
-house
[.cat]
-kitchen
[2.dog]
-house
[.cat]
-kitchen
[2.dog]
-house
[.cat]
-kitchen
[2.dog]
-house
[.cat]
-kitchen
[3.dog]
-house
[.cat]
-kitchen
[3.dog]
-house
[.cat]
-kitchen
[3.dog]
-house
[.cat]
-kitchen
[3.dog]
-house
[.cat]
-kitchen
[3.dog]
票数 2
EN

Stack Overflow用户

发布于 2021-10-31 01:24:20

你可以试试这个awk

代码语言:javascript
复制
$ awk 'BEGIN{FS=OFS="["} {split($2,a,".")}/dog/{a[1]=int(dog++/5);$2=a[1]+1"."a[2]}1' input_file

通过将每个dog匹配分割为20%或0.2,这将在一个整数中生成5个匹配,int将抑制浮点数,因此可能有更好的方法。

输出

代码语言:javascript
复制
$ awk 'BEGIN{FS=OFS="["} {split($2,a,".")}/dog/{a[1]=int(dog++/5);$2=a[1]+1"."a[2]}1' input_file
[1.dog]
-house
[.cat]
-kitchen
[1.dog]
-house
[.cat]
-kitchen
[1.dog]
-house
[.cat]
-kitchen
[1.dog]
-house
[.cat]
-kitchen
[1.dog]
-house
[.cat]
-kitchen
[2.dog]
-house
[.cat]
-kitchen
[2.dog]
-house
[.cat]
-kitchen
[2.dog]
-house
[.cat]
-kitchen
[2.dog]
-house
[.cat]
-kitchen
[2.dog]
-house
[.cat]
-kitchen
[3.dog]
-house
[.cat]
-kitchen
[3.dog]
-house
[.cat]
-kitchen
[3.dog]
-house
[.cat]
-kitchen
[3.dog]
-house
[.cat]
-kitchen
[3.dog]
票数 2
EN

Stack Overflow用户

发布于 2021-10-31 11:41:45

用户@Cyrus的回答:

代码语言:javascript
复制
awk 'BEGIN{ count=1 } /\.dog/{ t=count; sub(/\..*/,"",t); sub(".dog", t "&"); count+=.2 }1' file
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69783031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档