이것은 내 입력 파일입니다.
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