现在我找到一个能准确比较两个文本的终端。
请先查看以下详细信息
第一个文字
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"
如果可能的话,请给我更多关于此的指导
非常感谢
答案 0 :(得分:1)
让你入门。将程序保存到 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]
}
}