두 열을 두 열과 비교

두 열을 두 열과 비교

두 열의 값을 다른 두 열의 값과 비교해야 하는 파일이 있습니다. 몇 가지 예:

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 

그래서 제가 하고 싶은 것은 열을 비교하는 것입니다.&두번째도착하다&, 그러나 열의 값은&두번째그리고&상호 교환 가능합니다. 나는 이런 출력을 원한다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

여기서는 기본이 사용됩니다 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 스크립트에 대한 유용한 링크

관련 정보