unix 명령은 uniq -u
(의 기본 동작과 반대되는 uniq
) 정말 고유한 요소를 반환합니다. 예를 들어:
echo -e "a\na\nb\nc\nc\nd\ne\ne\ne\nf" | uniq -u
b
d
f
열 제한 방식으로 이 명령을 에뮬레이션하려면 어떻게 해야 합니까(예: 테이블에서 고유한 요소가 있는 열 찾기)? 입력이 이미 정렬되어 있다고 가정할 수 있습니다. 예를 들어, 열 1을 필요한 유일한 열로 만들면 다음과 같은 출력이 제공되어야 합니다.
echo -e "a\t1\na\t2\nb\t1\nc\t1\nc\t2\nd\t1\ne\t1\ne\t2\ne\t3\nf\t1" | some-command -col 1
b 1
d 1
f 1
열 2를 필요한 유일한 열로 사용하면 다음과 같은 출력이 제공됩니다.
echo -e "a\t1\na\t2\nb\t1\nc\t1\nc\t2\nd\t1\ne\t1\ne\t2\ne\t3\nf\t1" | some-command -col 2
e 3
답변1
awk 'NR==1 { lastcol1=$1; lastline=$0; next; }
{ if ($1==lastcol1) { repeated=1; next; }
if (repeated==0) print lastline; lastcol1=$1; lastline=$0; repeated=0; }
END { if (repeated==0) print lastline; }' input
b 1
d 1
f 1
답변2
awk를 사용하는 방법--
echo -e "a\t1\na\t2\nb\t1\nc\t1\nc\t2\nd\t1\ne\t1\ne\t2\ne\t3\nf\t1" | awk '{a[$1] = $0; count[$1]++} END{for (i in a) {if (count[i]== 1) print a[i]} }'
b 1
d 1
f 1
두 번째 열의 경우 유일한 값은 3입니다.
f 3
원하는 출력으로 "e 3"이어야 합니까?
echo -e "a\t1\na\t2\nb\t1\nc\t1\nc\t2\nd\t1\ne\t1\ne\t2\ne\t3\nf\t1" | awk '{a[$2] = $0; count[$2]++} END{for (i in a) {if (count[i]== 1) print a[i]} }'
e 3