【问题标题】:compare two file keys and update the value of file2 with corresponding key in file1比较两个文件键并将 file2 的值更新为 file1 中的相应键
【发布时间】:2016-08-11 14:53:58
【问题描述】:

我想比较两个文件。 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 脚本?

【问题讨论】:

    标签: file join awk merge compare


    【解决方案1】:

    一种可能的方式:

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

    如果文件 2 中不存在密钥,-a 1 参数会强制打印文件 1 中的行。

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

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

    【讨论】:

      【解决方案2】:

      我解决了这个问题 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 
      

      【讨论】:

        猜你喜欢
        • 2020-06-01
        • 2020-03-24
        • 1970-01-01
        • 2018-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-17
        • 1970-01-01
        相关资源
        最近更新 更多