比较两列与两列

比较两列与两列

我有一个文件,需要将两列中的值与另外两列进行比较。举些例子:

Item  A     B     C    D
1    201  3101   3101 201
2   3101   201    202 3101  
3   3101   201    201 3102 
4   3101   201   3202 202 

所以我想做的是比较列A&C&D,但列中的值A&C&D是可以互换的。我想要一个像这样的输出2如果两个值相同,1如果只有一个匹配并且0如果两者不匹配。答案是这样的

Item  A     B     C      D   Output
1    201  3101   3101   201    2
2   3101   201    202  3101    1
3   3101   201    201  3102    1
4   3101   201   3202   202    0

我怎样才能实现这一目标?

答案1

这个awk在线工具可以让您非常接近所需的输出(至少数字是正确的)。

awk '{n=0} $2==$4 {n=n+1} $2==$5 {n=n+1} $3==$4 {n=n+1} $3==$5 {n=n+1} {print $0, n}' inputfile

这里用的是Basic awk。引号之间的字符串每行都会执行,而括号之间的块仅当其前面的语句为 true 时才执行。$i指第 i 列。

答案2

另一个awk答案,核心部分是相同的。这是一个awk脚本,更具可读性

#!/bin/awk -f

BEGIN{ print "Item  A   B   C   D   Output"}
{
    count=0;
    if($2==$4) count+=1;
    if($2==$5) count+=1;
    if($3==$4) count+=1;
    if($3==$5) count+=1;
    if(NR != 1)
        print $1 "\t" $2 "\t" $3 "\t" $4 "\t" $5 "\t" count
}
END{} #Done

awk 脚本的有用链接

相关内容