如何修改awk命令实现target.txt的foo、bar替换为source.txt对应列内容
适配双字段替换的awk命令
根据你的需求,给出两种常用场景的可直接运行命令:
场景1:保留source列自带的方括号
awk 'NR==FNR {f1[NR]=$1; f2[NR]=$2; next} /foo/{++i; gsub("foo", f1[i]); gsub("bar", f2[i])} 1' source.txt target.txt > output.txt
场景2:去掉source列的方括号(替换后target的括号内无多余方括号)
awk 'NR==FNR {gsub(/\[|\]/,"",$1); gsub(/\[|\]/,"",$2); f1[NR]=$1; f2[NR]=$2; next} /foo/{++i; gsub("foo", f1[i]); gsub("bar", f2[i])} 1' source.txt target.txt > output.txt
逻辑说明
- 读取source.txt时,按行拆分两列分别存入两个数组,下标对应source的行号
- 读取target.txt时,只有包含foo的行才触发替换逻辑,按匹配到的顺序依次取source对应行的列内容替换foo和bar
- 所有不含foo的行(空行、含
=、(、)等特殊符号的行)都会原样输出,完全匹配你的补充要求
内容的提问来源于stack exchange,提问作者7beggars_nnnnm
相关产品推荐
相关产品推荐

