열로 제한된 고유 요소 찾기

열로 제한된 고유 요소 찾기

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

관련 정보