В AWK вы можете сделать что-то вроде этого:
awk '($1 == last) || (last == "") ($1 != last) && (last != "") END ' huge_text_file.txt
У меня огромные текстовые файлы с двумя полями, первое - строка, второе - целое число. Файлы отсортированы по первому полю. То, что я хотел бы получить в выводе, это одна строка на уникальную строку и сумму чисел для идентичных строк. Некоторые строки появляются только один раз, а другие появляются несколько раз. Например, учитывая приведенные ниже примеры данных, для строки 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
В AWK вы можете сделать что-то вроде этого:
awk '($1 == last) || (last == "") ($1 != last) && (last != "") END ' huge_text_file.txt
This type of queries are most easily and flexibly done in SQL. You can use SQLet and SQLite for that purpose:
sqlet.py -d' ' -A file1.txt 'select a1, sum(a2) from A group by a1' | sqlite3
Вы можете использовать несколько строк Lua, чтобы добиться этого. Lua доступен на широком спектре платформ, включая Windows и Linux.
- Быстро и грязно - без проверки ошибок, несортированный вывод io.input ( 'huge_text_file.txt') результаты = {} для строки в io.lines () do для текста число в string.gmatch (строка, '(% w +)% s + (% d +)') сделать результаты [текст] = (результаты [текст] или 0) + число конец конец для текста, число в парах (результаты) сделать печать (текст, номер) конец
Вы можете отсортировать вывод, используя любую утилиту сортировки или несколько строк Lua.
Вы можете использовать команду uniq, например
cat file | uniq -u -c
где: -c - количество вхождений -u - выводить только уникальные строки