准确比较两个文本
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]
}
}
亲爱的朋友
现在我正在寻找一个终端来准确比较两个文本。
请先查看以下详情
第一篇文字
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]
}
}