awk如何单次匹配替换两字符串并保留指定数组机制输出到单文件
错误原因
sub() 函数标准语法为 sub(匹配正则, 替换内容, [可选目标字符串]),最多仅支持3个参数,单次调用只能完成一种模式的替换,你传入4个参数自然会报参数数量错误。
可行方案
不需要多次调用awk进程,也不需要多次写入目标文件,在同一个awk逻辑内分别调用两次sub()即可,完全保留你要求的索引计算机制,代码如下:
awk \ 'FNR==1 {++f} f==1 {a[i++]=$0} f==2 { sub(/dog/, a[int((h++)%(0.5*2)/1)+1]) sub(/sun/, a[int((j++)%(0.5*2)/1)+2]) print > "single.txt" }' \ anti-dog-sun.txt dog.txt
运行后生成的single.txt内容完全符合预期:
school cat moon
内容的提问来源于stack exchange,提问作者7beggars_nnnnm
相关产品推荐
相关产品推荐

