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
。引用符の間の文字列は各行で実行され、括弧の間のブロックは前の文が真の場合にのみ実行されます。$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