gpt4 book ai didi

使用 awk 替换文件中第 n 次出现的字符,而不考虑行

转载 作者:行者123 更新时间:2023-12-04 06:18:15 24 4
gpt4 key购买 nike

无论使用 awk 的行如何,我都试图替换第 n 次出现的字符或字符串。

所以如果我们的数据是这样的

|||||||
||||||
|||||
|||

我们试图更换 |与 A

那么输出应该是这样的,假设我们想要替换每 3 次出现
||A||A|
|A||A|
|A||A
||A

我正在使用的当前 awk 命令是这样的
 awk '/|/{c++;if(c==3){sub(/|/,"A");c=0}}1' test.data

它错误地输出了这个
|||||||
||||||
A||||
|||

数据也可以是这样的
|||xfsafrwe|||asfasdf|
|safasf|||asfasdf||
||asfasf|||
|||

结果当然是这样
||Axfsafrwe||Aasfasdf|
|safasfA||asfasdfA|
|Aasfasf||A
||A

谢谢

最佳答案

使用 GNU awk:

awk '{
for (i = 0; ++i <= NF;)
++c % n || $i = v
}1' OFS= FS= n=3 v=A infile

OP澄清后调整:
awk '{
for (i = 0; ++i <=NF;)
if ($i == o)
++C % c || $i = n
} 1' FS= OFS= c=3 o=\| n=A infile

关于使用 awk 替换文件中第 n 次出现的字符,而不考虑行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6961416/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com