命令行中 SQL 类似于对文本文件进行分组和求和?

命令行中 SQL 类似于对文本文件进行分组和求和?

我有大量文本文件,其中包含两个字段,第一个字段是字符串,第二个字段是整数。文件按第一个字段排序。我希望在输出中得到每行唯一字符串以及相同字符串的数字总和。有些字符串只出现一次,而其他字符串则出现多次。例如,给出下面的示例数据,对于字符串 glehnia,我希望在结果中得到 10+22=32。

有什么建议关于如何使用 gnuwin32 命令行工具或在 linux shell 中执行此操作?

谢谢!

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

答案1

在 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

答案2

这种类型的查询最容易和灵活地在 SQL 中完成。您可以使用SQL 语句并使用 SQLite 来实现此目的:

sqlet.py -d' ' -A file1.txt 'select a1, sum(a2) from A group by a1' | sqlite3

答案3

你可以用几行Lua实现这一点。Lua 可在包括 Windows 和 Linux 在内的多种平台上使用。

-- 快速而粗糙 - 没有错误检查,未分类的输出

io.input('huge_text_file.txt')

结果 = {}

对于 io.lines() 中的行
    对于文本,string.gmatch(line, '(%w+)%s+(%d+)') 中的数字
        结果[文本] = (结果[文本] 或 0) + 数字
    结尾
结尾

对于文本,成对的数字(结果)
    打印(文本,数字)
结尾

您可以使用任何排序实用程序或更多行 Lua 对输出进行排序。

相关内容