2017-04-05 1 views
0

나는 많은 양의 파일을 해당 파일의 지정된 열에있는 고유 항목 수를 표시하는 일련의 명령으로 파이프하려고 시도하고 있습니다. 나는 쉘 미숙 합니다만, 잠시 후 나는이 함께 올 수있는 동안 : 명령이 시퀀스 파일의 작은 금액에 대해 잘 작동하지만에 시간을 용인 할 수없는 금액을 소요 파일 집합의 고유 한 열 항목 수를 표시하는 뛰어난 방법은 무엇입니까?

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

내 목표 세트에서 실행하십시오. 이 작업을보다 효율적으로 수행 할 수있는 명령 집합이 있습니까?

+0

'sort -u' 대신'sort -u'를 사용할 수 있습니다. 유니크 '. –

+0

처리하려는 입력 라인의 수는 얼마입니까? 짧은 샘플 입력 데이터를 포함 시켜서 실제로하고 싶은 것을 볼 수 있습니까? 또한 사용자가 제공 한 샘플 입력과 함께 예상 출력을 포함하십시오. 각 파일 또는 모든 파일에서 5 열의 고유 항목을 찾으십니까? – ghoti

답변

1

넌 AWK있는 단일 패스에서 다섯 번째 필드 값이 고유 발생 카운트 수의 값은 절대 가지지 않는 경우 이것은 ctr 변수 다섯 번째 필드에있는 값의 어레이를 생성하고 증가

awk '{if (!seen[$5]++) ++ctr} END {print ctr}' 

전에 본. END 규칙은 카운터의 값을 인쇄합니다.

GNU의 AWK와

, 당신은 양자 택일 만 결국 연관 배열의 길이를 확인할 수 있습니다 벤자민이 좋은 오일을 공급하고

awk '{seen[$5]++} END {print length(seen)}' 
1

, 그러나 얼마나 많은 데이터에 따라하면에 저장하는 것입니다 (나는 수) AWK하지만 멀지 않은 @BenjaminW의 이전 버전을 사용

awk '!_[$5]++' file | wc -l 
1

sortest을 빠른 : 배열, 어쨌든 화장실하기 위해 데이터를 전달하기 위해 지불 할 수 있습니다. 나는 조금 더 빨리 때문에

awk '!E[$5]++{c++}END{print c}' YourFile 

작품 모두 AWK 버전

0

GNUdatamash과 그 과정에서 이전에 만든 테스트 (차이가 매우 큰 파일에 흥미로운 일이 될 수있다)을 기능을 것 같아요 열의 경우 :

datamash -W count 5 
관련 문제