我有一个文件,需要将两列中的值与另外两列进行比较。举些例子:
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