SQL как группа и сумма для текстовых файлов в командной строке?

У меня есть огромные текстовые файлы с двумя полями, первой является строка, вторым является целое число. Файлы отсортированы по первому полю. То, что я хотел бы войти в вывод, является одной строкой на уникальную строку и сумму чисел для идентичных строк. Некоторые строки появляются только однажды в то время как другой появляющиеся многократно. Например, Учитывая демонстрационные данные ниже, для строки glehnia я хотел бы добраться 10+22=32 в результате.

Какие-либо предложения, как сделать это или с gnuwin32 инструментами командной строки или в оболочке Linux?

Спасибо!

glehnia 10
glehnia 22
glehniae 343
glehnii 923
glei 1171
glei 2283
glei 3466
gleib 914
gleiber 652
gleiberg 495
gleiberg 709

7
задан 02.05.2010, 13:38

2 ответа

В AWK Вы могли сделать что-то вроде этого:

awk '($1 == last) || (last == "") {sum += $2}
     ($1 != last) && (last != "") {print last " " sum; sum = $2}
                                  {last = $1}
     END                          {print last " " sum}' huge_text_file.txt
5
ответ дан 07.12.2019, 14:54

Вы могли использование несколько строк Lua для достигания этого. Lua доступен на широком спектре платформ включая Windows и Linux.

-- Quick and dirty - no error checking, unsorted output

io.input('huge_text_file.txt')

results = {}

for line in io.lines() do
    for text, number in string.gmatch(line, '(%w+)%s+(%d+)') do
        results[text] = (results[text] or 0) + number
    end
end

for text, number in pairs(results) do
    print(text, number)
end

Можно отсортировать вывод с помощью любой утилиты сортировки или еще нескольких строк Lua.

1
ответ дан 07.12.2019, 14:54

Теги

Похожие вопросы