准确比较两个文本

Compare two texts accurately

亲爱的朋友

现在我正在寻找一个终端来准确比较两个文本。

请先查看以下详情

第一篇文字

111  222  name1
111  555  sea1

第二篇文字

777  888  blue1
111  666  name1

最终结果

Updated:"111 666 name1" 

New Added:"777 888 blue1" 

New Deleted:"111 555 sea1"

首先,我们应该比较两个texts.you的第3列,可以发现两个文本中的"name1"是相同的。

基于此,我们开始比较"name1"行的第1列和第2列,找到different.But,第1列和第2列应该作为一个部分来比较,不是两部分

如果第二个文本存在差异,则打印最终结果

Updated:"111 666 name1" 

其次,如果第3列的名称只存在于第2个文本中,则打印最终结果

New Added:"777 888 blue1"

第三,如果第3列的名称只存在于第1个文本中,请打印最终结果

New Deleted:"111 555 sea1"

如果可以,请多多指教

非常感谢

让您入门。保存程序到diff.awk

# Usage:
# awk -f diff.awk old.txt new.txt 

function trim(s) { # remove trailing spaces
    sub("[[:space:]]+$", "", s)
    return s
}

function decode() { # sets `key', `val', and `all'
    all = [=10=]
    key = ;  = ""
    val = trim([=10=])
}

FNR != NR {
    file = 1
}

file == 0 { # old file
    decode()

    keys[n++] = key
    vals[key] = val
    alls[key] = all
}

file == 1 { # new file
    decode()

    if (!(key in vals))
        printf "New Added:\"%s\"\n", all
    else if (all != alls[key]) {
        printf "Updated:\"%s\"\n", all
        delete vals[key] # seen this key in new file
    }
}

END {
    for (i=0; i<n; i++) {
        key = keys[i]
        if (key in vals)
           printf "New Deleted:\"%s\"\n", alls[key]
    }
}