두 열의 값을 다른 두 열의 값과 비교해야 하는 파일이 있습니다. 몇 가지 예:
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
. 따옴표 사이의 문자열은 각 줄에서 실행되는 반면, 괄호 사이의 블록은 앞의 문이 참인 경우에만 실행됩니다. $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