亲爱的 friend
现在我正在寻找一个终端来准确比较两个文本。
请先检查以下详细信息
第一段文字
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"
首先,我们应该比较两个文本的第3列。你会发现两个文本中的“name1”是相同的。
基于此,我们开始比较“name1”行的第1列和第2列,找出不同之处。但是,第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 = $0
key = $3; $3 = ""
val = trim($0)
}
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]
}
}