2016-08-18 2 views
0

У меня есть файл с более чем 20 миллионами записей и вы хотите суммировать 5-й столбец для каждого уникального значения 1-го столбца, я использовал приведенный ниже код.ограничение ассоциативных массивов в awk. использование памяти

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

максимальное значение [я] на выходе ограничивается 9999.

любезно помочь мне ... любое решение ??

+1

awk делает ** нет ** прекратить считать на '9999'. В вашей проблеме есть что-то еще, что вы еще не сказали нам. Что происходит с меньшим файлом - вы получаете ожидаемые результаты? Вы получаете все уникальные значения значений $ 1? Получаете ли вы какие-либо сообщения об ошибках или какие-либо другие причины думать, что проблема связана с использованием памяти? Вы уверены, что у вас есть '$ 1', для которого сумма больше 9999? –

+0

, когда я запустил эту команду на o/p выше, есть значения больше, чем 9999 в $ 2 cat file.txt | awk 'BEGIN {FS = "|"} $ 2> 9999' однако после использования 10-sort "-t" | -k2 file | tail значения во втором столбце только до 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

Вы уверены, что суммы aren 'действительно 9999? 'grep' какой-то индексный показатель (' $ 1'), загрузить в Pastebin и разместить URL-адрес? –

+0

- это потому, что значения столбца 5 имеют как числовые значения, так и строки – user6677057

Смежные вопросы