Итоговая итоговая сумма в текстовом файле - PullRequest
1 голос
/ 17 августа 2010

Имеется текстовый файл с разделителями-вкладками с двумя столбцами «имя» и «дата»:

Sam     20100101
Sam     20100101
Sam     20100102
George  20100101
George  20100101
George  20100102

Могу ли я использовать awk для добавления третьего столбца с разбитой промежуточной суммой, например, начиная счетчик с 0 для каждого отдельного шаблона первого и второго столбцов, а затем увеличивая его при любом повторении шаблона?

Sam     20100101     1
Sam     20100101     2
Sam     20100102     1
George  20100101     1
George  20100101     2
George  20100102     1

Я делаю это в SQL: выберите row_number () over (разбиение по столбцу 1, порядок по столбцу два по столбцу 10) из таблицы

но мне нужна альтернатива - не обязательно awk, но это пришло в голову - для текстовых файлов, не обработанных SQL. Текстовые файлы ~ 50 ГБ каждый с около 200 мил строк.

Я использую счетчик для удаления повторяющихся строк. Я знаю, что, учитывая мой пример выше, это можно сделать с помощью:

sort myfile.txt | uniq -u

но в моих текстовых файлах есть дополнительные столбцы, не включенные в мой пример (для краткости), которые могут не создавать полностью дублированную строку.

если я добавлю параметры, соответствующие только столбцам имени и даты в

sort myfile.txt | uniq -u

команда? Awk? Что-то еще?

1 Ответ

3 голосов
/ 17 августа 2010

Если все строки имеют одинаковое форматирование (включая пробелы), то сработает что-то простое:

awk '{print $0, ++a[$0]}'

Я не уверен в производительности файлов размера GB, так как для этого потребуетсяхранить число в уникальной строке.Если ваши данные отсортированы, вы можете получить фиксированный объем хранилища:

awk '{ if ($0 != prev) n = 0; print $0, ++n; prev = $0 }'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...