比较两个文件密钥,并使用file1中的相应密钥更新file2的值

时间:2016-04-19 12:19:51

标签: file join awk merge compare

我想比较两个文件。 file1具有以下内容,

 File1:
   key1=value1
   key2=value2
   key3=value3
   key4=value4
   key5=value5

我的文件2具有以下内容

 File2:
   key2=value2.2
   key3=value3.3

现在我要比较两个键值对并将file2中匹配键的值更新为file1,并将剩余键值保存在file1中

我的预期文件如下:

 File3:
   key1=value1
   key2=value2.2
   key3=value3.3
   key4=value4
   key5=value5

建议任何命令或shell脚本?

2 个答案:

答案 0 :(得分:0)

一种可能的方式:

join -t = -a 1 file1 file2 | sed 's/=.*=/=/'

如果file2中不存在该键,则-a 1参数强制从文件1打印该行。

请注意,要使用join命令,必须事先对这两个文件进行排序。如果不是,你可以这样写:

join -t = -a 1 <(sort file1) <(sort file2) | sed 's/=.*=/=/'

答案 1 :(得分:0)

我解决了这个问题newfile.sh

在newfile.sh中包含

   ##############file1 value#################
   var1=`cat /path/to/file1.txt | grep -i "key2" | cut -d '=' -f2`
   var2=`cat /path/to/file1.txt | grep -i "key3" | cut -d '=' -f2`
   ###############file2 value###################
   var11=`cat /path/to/file2.txt | grep -i "key2" | cut -d '=' -f2`
   var22=`cat /path/to/file2.txt | grep -i "key3" | cut -d '=' -f2`
   ###############################################
   sed -i "s~$var1~$var11~g; s~$var2~$var22~g" /path/to/file1.txt