下面的文件包含15 times字符串.dog。通常,当我想在字符串中添加用于计数的数字时,我使用awk '/\.dog/{sub(".dog",++count"&")} 1',并且使用这个命令的一些变体,就像在这个问题awk sub ++count every 4 matches unlike every 1 match中一样。
[.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,同时附加一个数字。所以我的产出应该是:
[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> ',但我仍然不确定。
发布于 2021-10-31 03:53:53
$ 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]发布于 2021-10-31 01:24:20
你可以试试这个awk
$ 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将抑制浮点数,因此可能有更好的方法。
输出
$ 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]发布于 2021-10-31 11:41:45
用户@Cyrus的回答:
awk 'BEGIN{ count=1 } /\.dog/{ t=count; sub(/\..*/,"",t); sub(".dog", t "&"); count+=.2 }1' filehttps://stackoverflow.com/questions/69783031
复制相似问题