从主文件中的值查找和替换文件

时间:2017-09-06 07:57:54

标签: bash shell awk sed scripting

我想用另一个主文件中的查找值替换文件中的值

我目前正在使用以下命令来执行此操作

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

如果我必须替换多个单词,它就无法正常工作。

任何帮助都将不胜感激。

提前致谢。

1 个答案:

答案 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

您必须通过以下方式将两个字段(替换,替换目标)分开来对地图文件进行调整:(或其他任何内容,只需在脚本中更改它)。如果你这样做,它会使脚本保持低复杂性,但现在可以解决你想要替换的单词数量。