我想用另一个主文件中的查找值替换文件中的值
我目前正在使用以下命令来执行此操作
awk 'FNR==NR { array[$1]=$2; next } { for (i in array) gsub(i, array[i]) }1' map.txt test1.txt
cat map.txt
非空
cat test.txt
字符集拉丁语不是CASESPECIFIC NOT NULL
结果:
CHARACTER SET LATIN NOT CASESPECIFIC NULL NULL
可以替换单个单词。
但是当我在引号内加上多个单词时说
cat map.txt
' NOT NULL' ' NULL'
预期输出:
CHARACTER SET LATIN NOT CASESPECIFIC NULL
如果我必须替换多个单词,它就无法正常工作。
任何帮助都将不胜感激。
提前致谢。
答案 0 :(得分:0)
因此,如果您可以在不引用单词的情况下生活,并且map.txt文件对于所有替换都看起来相同,则可以执行以下操作:
aawk 'FNR==NR{ array[$1]=$2; next } { for (i in array) gsub(i, array[i]) }1' FS=":" map.txt FS=" " test.txt
cat test.txt
CHARACTER SET LATIN NOT CASESPECIFIC NOT NULL
cat map.txt
NOT NULL : NULL
输出:
CHARACTER SET LATIN NOT CASESPECIFIC NULL
另一个:
cat test.txt
CHARACTER SET LATIN NOT CASESPECIFIC NOT NULL
cat map.txt
SET LATIN NOT CASESPECIFIC NOT : NULL
输出:
CHARACTER NULL NULL
您必须通过以下方式将两个字段(替换,替换目标)分开来对地图文件进行调整:(或其他任何内容,只需在脚本中更改它)。如果你这样做,它会使脚本保持低复杂性,但现在可以解决你想要替换的单词数量。