我正在尝试使用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
由于
答案 0 :(得分:3)
使用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