2列を2列と比較

2列を2列と比較

2つの列の値を他の2つの列の値と比較する必要があるファイルがあります。いくつかの例:

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 

だから私がしたいのは熱を比較することです。&第二到着&Dしかし、列の値は&第二そして&D交換可能です。私はこの出力が欲しい22つの値が同じ場合、11つだけ一致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

ここでは基本が使用されますawk。引用符の間の文字列は各行で実行され、括弧の間のブロックは前の文が真の場合にのみ実行されます。$ii番目の列を参照します。

答え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スクリプトへの便利なリンク

関連情報