我有大量文本文件,其中包含两个字段,第一个字段是字符串,第二个字段是整数。文件按第一个字段排序。我希望在输出中得到每行唯一字符串以及相同字符串的数字总和。有些字符串只出现一次,而其他字符串则出现多次。例如,给出下面的示例数据,对于字符串 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 对输出进行排序。