AWK 比较文件1和文件2中的列

AWK 比较文件1和文件2中的列

我有一个简单的问题,但一直无法解决。我想将 的第 2、3、4、5 和 6 列与 的File1相同列进行比较File2,如果它们匹配,则将Column1添加File2到。Column7File1

我曾尝试过awk NR == FNR基于以前发布的类似问题的解决方案,但无法获得正确的输出。

File1

Column1 Column2 Column3 Column4 Column5 Column6
Genome1 1       1       2       1       2
Genome2 1       1       2       1       2
Genome3 1       2       2       1       2

File2

Column1 Column2 Column3 Column4 Column5 Column6
Profile1 1       1       2       1       2
Profile2 1       2       2       1       2
Profile3 1       3       2       1       2

预期成绩:

File1
Column1 Column2 Column3 Column4 Column5 Column6 Column7
Genome1 1       1       2       1       2       Profile1
Genome2 1       1       2       1       2       Profile1
Genome3 1       2       2       1       2       Profile2

你有什么建议吗?

答案1

您需要先将要匹配的所有列保存在第二个文件的相同列上,然后对从第一个文件中读取的每一行进行比较:

awk 'NR==FNR {
    if(NR==1) $1="Column7"; file2[$2, $3, $4, $5, $6]=$1; next; };
    (($2, $3, $4, $5, $6) in file2){ print $0, file2[$2, $3, $4, $5, $6];
}' OFS='\t' file2 file1

Column1 Column2 Column3 Column4 Column5 Column6 Column7
Genome1 1       1       2       1       2       Profile1
Genome2 1       1       2       1       2       Profile1
Genome3 1       2       2       1       2       Profile2

相关内容