다음과 같이 탭으로 구분된 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
헤더가 손실됨+2
file
tail -n +2 file |
sort
-u
ey에서 범용 번호를 사용하는 -g
고유한 기능-k
2
sort -ugk2 |
column
경작 가능 -t
하지만 -H
ide 열로 출력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