파일에서 필드의 고유 한 값 계산


17

파일에 약 백만 개의 줄이 있습니다. 줄 transactionid에는 반복적 인 값을 가진 이라는 필드 가 있습니다. 내가해야 할 일은 그들을 분명히 세는 것입니다.

값이 몇 번 반복되는지에 관계없이 한 번만 계산해야합니다.


파일 형식을 살짝 볼 수 있다면 더 쉬울 것입니다. 반드시 데이터는 아닙니다.
Nikhil Mulley

btw, 존재하는 횟수에 관계없이 값을 1로 계산 하시겠습니까? 또는 발생 / 반복 수를 계산 하시겠습니까? 한 번만 계산하려면 고유 값을 어떻게 계산합니까? 귀하의 질문에 대한 편집 내용을 확인하고 제가 해석하는 것이 옳은지 확인해주십시오.
Nikhil Mulley

@Nikhil 이것은 질문에서 분명하다 :... No matter of how many times a value is repeated, it should be counted as 1. ...

좋아, 그럼 @hesse의 답변이 필요합니다.
Nikhil Mulley

대기 시간이 유감입니다. 인터넷 연결이 끊어졌습니다. 분리기는 2 | ' field는 field 28입니다. cat <file_name> | awk -F"|" '{if ((substr($2,0,8)=='20120110')) print $28}' | sort -u | wc -l if 절은 명백한 것처럼 또 다른 날짜를 확인하기위한 것이 었습니다 :)
Olgun Kaya

답변:


23

파일이 텍스트 파일이라고 가정하면 필드는 쉼표 구분 기호 ','로 구분됩니다. 'transactionid'위치에 따라 어떤 필드 가 있는지 알 수도 있습니다 . 'transactionid'필드가 7 번째 필드 라고 가정 합니다.

awk -F ',' '{print $7}' text_file | sort | uniq -c

이것은 7 번째 필드에서 구별 / 고유 발생을 계산하고 결과를 인쇄합니다.


왜 명령 sort하기 전에 uniq.
g10guang

@ g10guang uniq서로 옆에 있어야 할 기록을 없애기 위해 .
dsz

3

가장 매끄러운 방법은 아니지만 다음과 같이 작동합니다.

awk '{print $1}' your_file | sort | uniq | wc -l

여기서 $1구문 분석 할 필드에 해당하는 번호입니다.


3

파일을 정렬 할 필요가 없습니다.. (파일을 정렬해야합니다. uniq)
이 awk 스크립트는 필드가 첫 번째 공백 제거 된 필드라고 가정합니다.

awk 'a[$1] == "" { a[$1]="X" } END { print length(a) }' file 

거대한 파일 (예 : RAM 크기에 가까움)의 경우 awk는 많은 메모리를 소비합니다. 대부분의 sort구현은 큰 파일을 처리하도록 설계되었습니다.
Gilles 'SO- 악마 그만해'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.