첫 번째 열의 중복을 제거하고 두 번째 열의 값을 출력하려면 어떻게 해야 하나요?

첫 번째 열의 중복을 제거하고 두 번째 열의 값을 출력하려면 어떻게 해야 하나요?

다음과 같이 탭으로 구분된 CSV 파일이 있습니다.

C1      C2
A       3
B       4
C       5
B       4
A       3

열 1에서 중복을 제거하고 모든 고유한 첫 번째 값에 대해 열 2의 값을 출력하려면 어떻게 해야 합니까? 출력 예:

3
4
5

awk -F '\t' '{print $1}' file_name.csv | sort | uniq -c첫 번째 열의 데이터를 정렬하고 중복 항목을 "제거"하려고 시도했지만 두 번째 열이 제거됩니다. 저는 쉘 스크립팅의 초보자이므로 도움을 주시면 감사하겠습니다.

답변1

awk -F '\t' 'NR>1 && !seen[$1]++{print $2}' file_name.csv
  • NR>1첫 번째 줄이 거짓이면 건너뜁니다.
  • !seen[$1]++단 1개(또는진짜) 처음으로 구문 분석된 첫 번째 필드 값에 대해(반복적으로 0으로 평가되거나잘못된).
  • print $2두 조건이 모두 충족되면 두 번째 필드가 인쇄됩니다.

답변2

awk비 버전을 사용 sort하고uniq

tail -n +2 file | sort -ugk2 | column -t -H 1

tail시작 줄 번호를 인쇄하여 -n헤더가 손실됨+2file

tail -n +2 file | 

sort -uey에서 범용 번호를 사용하는 -g고유한 기능-k2

sort -ugk2 | 

column경작 가능 -t하지만 -Hide 열로 출력1

column -t -H 1

답변3

처음 두 열만 원하는 경우 다음을 사용할 수 있습니다.

awk -F '\t' '!seen[$1]++{print $2}' testfile

답변4

밀러head첫 번째 그룹을 수강할 수 있는 그룹이 있습니다.N특정 열 값과 일치하는 레코드(이 경우n=1):

$ mlr --tsv head -g C1 -n 1 then cut -f C2 file.tsv
C2
3
4
5

열 헤더가 필요하지 않은 경우 tsv입력 형식을 유지하되 출력 형식을 인덱스로 변경하세요.

mlr --itsv --onidx head -g C1 -n 1 then cut -f C2 file.tsv

관련 정보