동일한 파일의 행 열을 비교하는 방법은 무엇입니까?

동일한 파일의 행 열을 비교하는 방법은 무엇입니까?

이것은 내 입력 파일입니다.

A B B A  
A A A   
B A B A  
B B  
A A  
A B

모든 열이 동일하면 첫 번째 열만 인쇄하고 싶습니다.
그렇지 않으면 인쇄하고 싶습니다 multi.

원하는 출력:

multi  
A  
multi  
B  
A  
multi

누가 날 도울 수 있죠? (나는 awk또는 을 선호한다 sed.)

답변1

AWK 사용:

awk '{ for (i = 2; i <= NF; i++) { if ($i != $1) { print "multi"; next } }; print $1 }'

각 행은 다음과 같이 처리됩니다.

  • 두 번째 필드부터 시작하여 각 필드를 첫 번째 필드와 비교합니다.
  • 차이점이 발견되면 "multi"를 인쇄하고 다음 줄로 이동합니다.
  • 차이점이 발견되지 않으면(루프가 종료되거나 완전히 건너뜁니다.예를 들어필드가 없거나 필드가 하나만 포함된 줄의 경우 첫 번째 필드를 인쇄하고 다음 줄로 이동합니다.

답변2

awk/는 perl작업에 더 나은 도구이지만 다음을 사용할 수도 있습니다 sed.

sed -E 's/^([^[:blank:]]*)([[:blank:]]+\1)*$/\1/;t;s/.*/multi/' infile

답변3

$ awk '{b=$1; gsub($1,""); if (/^\s*$/) {print b} else {print "multi"}}' file         
multi
A
multi
B
A
multi

관련 정보