2016-08-18 4 views
0

2 천만 개가 넘는 레코드가있는 파일이 있고 첫 번째 열의 고유 한 값마다 5 번째 열을 더하고 싶습니다. 아래 코드를 사용했습니다. (A)의awk에서 연관 배열 제한. 메모리 사용량

cat test.txt |awk 'BEGIN{FS="|"}{a[$1]+=$5;}END{for(i in a) print i"|"a[i];}' 

최대 값은 [I]를 출력 어떤 솔루션 ... 친절 도와 9999

제한된다 ??

+1

awk는 '9999'에서 계산을 중지하지 않습니다 **. 당신이 아직 우리에게 말하지 않은 당신의 문제에 관해 뭔가 다른 것이 있습니다. 더 작은 파일은 어떻게됩니까? 예상 한 결과를 얻으십니까? 고유 한'$ 1' 값을 모두 출력합니까? 문제가 메모리 사용량이라고 생각하는 오류 메시지 또는 다른 이유가 있습니까? 합계가 9999보다 큰'$ 1 '을 (를) 가지고 있습니까? –

+0

위의 o/p에서이 명령을 실행했을 때 $ 2에 9999보다 큰 값이 있습니다. cat file.txt | awk 'BEGIN {FS = "|"} $ 2> 9999' 그러나 사용 후 정렬 -t "|" -k2 파일 | 꼬리 두 번째 열의 값은 9999 개까지입니다 ... 왜 그렇게 ?? – user6677057

+0

'sort'는 숫자가 아닌 알파벳순 정렬입니다. 'sort -n ... '을 시도하십시오 –

답변

1
$ cat > file 
1||||a|NOTICE A LETTER IN FIFTH 
1||||5 
2||||57 
2||||34535 
3||||34535353 
3||||1 
1||||1 
$ cat file|awk 'BEGIN{FS="|"}{a[$1]+=$5;}END{for(i in a) print i"|"a[i];}' 
1: 6 
2: 34592 
3: 34535354 

위의 데이터로 어떤 점이 좋습니까?

+0

1 | 8 2 | 34592 3 | 34535354 ....이 작업 중입니다 .. 내 파일이 작동하지 않는 것을 알고 있습니다. :( – user6677057

+0

정말 합계가 틀리지 않습니까? (실제로는 9999)'grep' 일부 입자 색인 ('$ 1'), Pastebin에 업로드하고 URL을 게시 하시겠습니까? –

+0

열 5의 값에 숫자 값과 문자열이 모두 포함되어 있기 때문에 – user6677057