我有两个文件。文件1有3000行(1500 Ids),文件2有1400行(700 Ids)。文件1包含文件2中存在的所有ID。我必须匹配File1&的ID列。文件2同时保持ID的顺序。如果文件1中的id存在于文件1中,则比较第2列并打印匹配或不匹配。 catch是有重复的id,我需要保留它们。寻找一个awk或sed解决方案。谢谢!
File1
ID A
1 13
1 14
2 13
2 13
3 13
3 12
4 13
4 14
5 14
5 14
File 2
ID A
2 13
2 13
3 13
3 3
5 14
5 15
Desired output
ID A
2 13 Match
2 13 Match
3 13 Match
3 3 mismatch
5 14 Match
5 15 mismatch
答案 0 :(得分:1)
您可以使用awk
来实现这一目标,
awk '
NR==FNR{ if(a[$1]=="") a[$1]=$2; next}
/[0-9]/{
if(a[$1]==$2){
print $0,"match"
} else {
print $0,"mismatch"
} id=$1
}' File1 File2
输出:
2 13 match
2 13 match
3 13 match
3 3 mismatch
5 14 match
5 15 mismatch
简要说明,
NR==FNR{...}
:在File1中,如果ID以前从未显示,请将id / value保存到数组a
if(a[$1]==$2)
:如果ID和值在File2中匹配,则将记录视为匹配,否则不匹配。答案 1 :(得分:0)
最简单的方法是遍历文件2中的行,并且每行在文件1中找到匹配的ID。由于您没有提供编程语言,这里是伪代码的解决方案:
for all rows in file2
for all rows in file1
if current_row_file1.id = current_row_file2.id
then
if current_row_file1.value_column2 = current_row_file2.value_column2
then
print current_row_file2.id + current_row_file2.value_column2 + "Match"
else
print current_row_file2.id + current_row_file2.value_column2 + "Mismatch
上面的代码需要花费一些时间来循环遍历文件1中文件1中每一行的所有记录。如果您对文件1中的ID进行了排序,则可以使用二进制搜索等算法来加速处理。在这里查看解释https://en.wikipedia.org/wiki/Binary_search_algorithm