2016-04-19 8 views
0

2つのファイルを比較したいと思います。コンテンツの下にあるファイルfile1、2つのファイルキーを比較し、file1の対応するキーでfile2の値を更新します。

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

私FILE2がコンテンツ

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

下回った今、私はキーの両方の値のペアを比較し、file1とも残りのキーを維持するためにFILE2にマッチしたキーの値を更新したいです以下FILE1

私の期待ファイルの値:

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

が示唆しますnyコマンドまたはシェルスクリプト?

答えて

0

可能な方法:

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

-a 1パラメータ軍キーがFILE2に存在しない場合は、ファイル1からのラインを印刷します。

joinコマンドを使用するには、2つのファイルを事前にソートする必要があります。そうでない場合は、この書くことができます。

join -t = -a 1 <(sort file1) <(sort file2) | sed 's/=.*=/=/' 
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 
が含まれています
関連する問題