2015-10-15 66 views
-2

我嘗試在一個文件中合併兩個json文件,但有一個條件,例如:如果文件1有例如:testa:result> fail並且文件b包含相同行,但有不同的結果,例如:testa:result> pass,我希望文件1會更新文件2的結果,我有awk命令的這一行,但它只合並沒有這種情況的文件:在bash中用awk合併兩個Json文件

awk 'BEGIN{print "{"} FNR > 1 && last_file == FILENAME {print line} FNR == 1 {line = ""} FNR==1 && FNR != NR {printf ","} FNR > 1 {line = $0} {last_file = FILENAME} END{print "}"}' json_files/* > json_files/all_merged.json 

請給我幫助。

+0

請提供更多關於輸入和預期輸出的信息。 – luoluo

+0

對不起,以下是更多信息:file1.json包含以下Testname:color「result」:「fail」,並且file2.json包含以下內容:Testname:color「result」:「pass」,並且我預計file3.json包含與最後結果相同的行,例如:Testname:color「result」:「pass」,這是因爲file2.json爲什麼更新 – shaveax

+0

是awk的一個要求嗎?其實它似乎有點尷尬:) – user3159253

回答

1

我建議使用python作爲任務。考慮下面這個例子:

import json 
from pprint import pprint 

fileName1 = "file1.json" # file1 contains something like { "Testname": "color", "result": "fail" } 
fileName2 = "file2.json" # file2 contains something like { "AnotherTestname": "color2", "result": "pass" } 
fileNameTo = "file3.json" 

def visualize(data, prompt): 
    print(prompt) 
    pprint(data) 
    raw_input("Press <Enter> to continue: ") # this line pauses the execution 

def loadData(fname): 
    with open(fname, "r") as f: 
     return json.load(f) 

jd1 = loadData(fileName1) 
visualize(jd1, "Data from %s" % fileName1) 
jd2 = loadData(fileName2) 
visualize(jd2, "Data from %s" % fileName2) 
jd3 = jd1.copy() # create a copy of data from file1, this step can be avoided if you don't need unmodified jd1 
visualize(jd3, "Data after copying") 
jd3.update(jd2) # merge copy of data from file1 with file2, updating corresponding keys 
visualize(jd3, "Data after merging") 
with open("file3.json", "w") as f3: 
    json.dump(jd3, f3) 

這個腳本的版本取得了一定的「互動」,它讓你在執行的每一步控制數據的狀態。我剛剛檢查過它按預期執行數據合併。請嘗試根據您的測試數據運行它並查看輸出。

+0

嗨,感謝您的腳本,但我有一個小問題,問題是,文件1包含例如100行,文件2包含例如50行,所以在運行python腳本後,file3.json包含確切的行file2.json,並且是相同的信息:(所以主要想法是file1.json總是會用file2.json的結果更新 – shaveax

+0

#user3159253你能幫我嗎? – shaveax