对平面文件进行简单,快速的SQL查询

pli*_*han 14 sql linux sorting flat-file

有没有人知道使用类似SQL的声明性查询语言提供简单,快速的平面文件查询的工具?我宁愿不支付将文件加载到DB中的开销,因为输入数据通常在查询运行后几乎立即被抛出.

考虑数据文件"animals.txt":

dog 15
cat 20
dog 10
cat 30
dog 5
cat 40
Run Code Online (Sandbox Code Playgroud)

假设我想为每个独特的动物提取最高值.我想写一些类似的东西:

cat animals.txt | foo "select $1, max(convert($2 using decimal)) group by $1"
Run Code Online (Sandbox Code Playgroud)

我可以得到几乎相同的结果sort:

cat animals.txt | sort -t " " -k1,1 -k2,2nr
Run Code Online (Sandbox Code Playgroud)

而且我总是可以awk从那里进入,但是awk当一种类似SQL的语言看起来如此干净地解决问题时,这一切都感觉有些困难(无法抗拒).

我已经考虑为SQLite编写一个包装器,它会根据输入数据自动创建一个表,我已经研究过在单处理器模式下使用Hive,但我不禁感到这个问题以前已经解决了.我错过了什么吗?此功能是否已由另一个标准工具实现?

HALP!

pli*_*han 0

我从来没有找到一个令人满意的答案来解决我的问题,但我至少找到了使用uniq“-f”选项来解决我的玩具问题的解决方案,这是我不知道的:

cat animals.txt | sort -t " " -k1,1 -k2,2nr \
| awk -F' ' '{print $2, " ", $1}' | uniq -f 1
Run Code Online (Sandbox Code Playgroud)

awk显然,如果输入文件是使用相反顺序的列创建的,则可以完全跳过上面的部分。

不过,我仍然对类似 SQL 的工具抱有希望。