2012-03-07 2 views
0

다음과 같은 스크립트가 있습니다. 구분 된 필드/값 쌍. 샘플 데이터는 다음과 같습니다 | 사과 = 32.23 | 바나나 = 1232.12 | 포도 = 12312 | 배 = 231 | 포도 = 1231 |더 빠르게 정렬하고 계산하는 방법 cat 파일 | 정렬 | uniq -c

로그 파일에 A, B 또는 C 필드 이름이 몇 번 나타나는지 조사하려고합니다. 필드 목록은 동적이어야합니다. 로그 파일은 각각 500MB 정도의 '큰 크기'이므로 각 파일을 정렬하는 데 시간이 걸립니다. 일단 잘라내어 한 줄에 하나의 필드가있는 파일을 얻으면 더 빨리 계산할 수 있습니까?

cat /bb/logs/$dir/$file.txt | tr -s "|" "\n" | cut -d "=" -f 1 | sort | uniq -c > /data/logs/$dir/$file.txt.count 

이 부분이 빠르게 실행된다는 사실을 알고 있습니다. 나는 그것이 일종의 수렁에 빠졌음을 확실히 볼 수있다.

cat /bb/logs/$dir/$file.txt | tr -s "|" "\n" | cut -d "=" -f 1 

내가 파일을 정렬 한 후 더 이상

Apple 
Banana 
Grape 
Pear 
Grape 

물론의 샘플 출력은 다음과 같습니다 컷을 실행하고 계산 한 후 나는 문제는

1 Apple 
1 Banana 
1 Pear 
2 Grape 

입니다 얻을 내 실제 데이터 정렬이 너무 오래 걸립니다. 파일 크기를 줄이는 것이 더 빠를 것 같지만 '큰'텍스트 파일의 고유 항목을 계산하는 가장 빠른 방법은 확실하지 않습니다.

+0

포스트는 일부 샘플 데이터와 비트에 뭔가를 게시 할 예정입니다 UR 원하는 오/P – Teja

+0

괜찮 – personalt

+0

.. 그게 잘 될 shud'고양이 파일을보다 빠르게 – Teja

답변

3

AWK는 정렬하지 않고도 잘 수행 할 수 있습니다. 더 잘 수행해야합니다.

cat test.txt | tr -s "|" "\n" | cut -d "=" -f 1 | 
    awk '{count[$1]++}END{for(c in count) print c,"found "count[c]" times."}' 
+0

감사합니다. 몇 분 후에 샘플을 사용해 시험해 보겠습니다. – personalt

+0

이 방법은 빠릅니다 ...... – personalt

관련 문제