有谁知道任何工具提供的使用类似SQL的声明性查询语言平面文件简单,快捷的查询?我宁可不支付的文件加载到数据库中,因为输入数据通常几乎立即执行查询后抛出的开销。

考虑数据文件, “animals.txt”:

dog 15
cat 20
dog 10
cat 30
dog 5
cat 40

假设我要提取每个独特动物的最高值。我想写点东西,如:

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

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

cat animals.txt | sort -t " " -k1,1 -k2,2nr

和我可以随时掉入awk从那里,但是这一切都感觉有点awkward(无法抗拒)当一个类似于SQL的语言似乎是如此工整解决问题。

我认为写的SQLite会自动创建一个基于输入数据的表的包装,我已经研究过在单处理器模式下使用蜂巢,但我不禁觉得这个问题已经之前解决。我缺少的东西吗?难道这个功能已经被另一个标准工具实现的?

HALP!

有帮助吗?

解决方案 6

我从来没有设法找到一个满意的回答我的问题,但我并至少找到一个解决方案,以使用uniqs“-f”选项,我的玩具的问题,我一直不知道的:

cat animals.txt | sort -t " " -k1,1 -k2,2nr \
| awk -F' ' '{print $2, " ", $1}' | uniq -f 1

上面的awk部分可以,很明显,完全跳过如果输入文件被以相反的顺序与列创建。

我还抱着希望有一个类似SQL的工具,虽然。

其他提示

我写 TxtSushi 主要做SQL选择的平面文件。这里是您的示例命令链(所有这些命令是从TxtSushi):

tabtocsv animals.txt | namecolumns - | tssql -table animals - \
'select col1, max(as_int(col2)) from animals group by col1'
因为animals.txt不具有标题行

namecolumns时才需要。您可以通过的示例脚本的。也有链接到类似的工具在主页的底部。

的Perl DBI使用 DBD :: ANYDATA

可以使用SQLite。下面是使用Python一个例子。

import sqlite3
conn = sqlite3.connect('/tmp/test.db')
cursor = conn.cursor()
try:
    cursor.execute("""create table table1 (word varchar not null, number varchar not null)""")
except: pass
cursor.execute("insert into table1 values ('dog', '15')")
cursor.execute("insert into table1 values ('cat', '20')")
cursor.execute("insert into table1 values ('dog', '10')")
cursor.execute("select max(number) , word from table1 group by word")
print cursor.fetchall()

输出

$ ./python.py
[(u'20', u'cat'), (u'15', u'dog')]

我只是碰到这个Python脚本它确实像你想,尽管它仅支持很基本的查询。

我做了一个工具,它可以帮助。 http://www.mccoyonlinestore.com/index.php?txtSearch=mccoy_rdbms 您的SQL可能是“选择与动物最大(值)” 或者它可以由

“从动物为了通过值降序选择*”

您可以看看 HXTT JDBC驱动。它们提供了大部分类型的平面文件,EXCEL等JDBC驱动程序。

您可以在上面执行简单的SQL查询。

他们有试用版本以及

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top