2 个版本

0.3.2 2024 年 8 月 8 日
0.3.1 2024 年 8 月 7 日

#460数据库接口

Download history 219/week @ 2024-08-05

219 每月下载量

BSD-3-Clause

85KB
2K SLoC

fqs - 文件查询

test coverage fmt Crates.io Version

fqs 是一个用于编写文件查询的命令行工具。查询语法受到 SQL 的启发。在许多方面,fqs 与以下一个(或组合)类似:cutpastebcgrepawk,但 fqs 提供了类似 SQL 的声明式查询语言。

以下是一个示例命令,该命令打印第一列值大于 1000 的每一行的第二列值。

fqs "select str(@1) from path/to/file where int(@0) > 1000"

fqs 使用 ' ' 作为给定文件中列的分隔符。(这相当于 cut -d' '。)

示例

本节提供了几个示例。假设我们有一个以下文件(demo.txt)。

33 77.0 true text
44 88.98 false more
77 123. true next

下一个命令打印文件第一列的所有值。注意,我们使用 @0 作为列引用。

fqs "select int(@0) from demo.txt"

下一个命令打印第一列值的两倍。

fqs "select int(@0) * 2 from demo.txt"

下一个命令仅在第三列是 true 时打印第一列的值。

fqs "select int(@0) from demo.txt where bool(@2) = true"

下一个命令重新排序列,将其中一个列从小写字母更改为大写字母,并且只处理第二列值大于 80 的行。

fqs "select upper(str(@3)), sin(int(@0)) from demo.txt where float(@1) > 80"

下一个命令显示行数、第一列所有值的总和以及第二列的最大值。

fqs "select count(1), sum(int(@0)), max(float(@1)) from demo.txt"

查询语言

目前,fqs 支持 select 语句。在许多方面,select 语句与您可能从 SQL 中了解的类似,但由于数据的本质,存在一些差异。以下是语言的(近似)语法。

Query ::= "select" Columns "from" Path ["where" Condition]
Columns ::= Aggs | Exprs
Aggs ::= AggFunc [,AggFunc]*
AggFunc ::= Id "(" CExpr ")" # see the list of functions later in this document
Exprs ::= CExpr [, CExpr]*
CExpr ::= ScaFunc | AExprs
AExprs ::= MExprs [Aop AExprs]
MExprs ::= MExprs [Mop Operand] | Operand
ScaFunc ::= Id "(" CExpr ")" # see the list of functions later in this document
Path ::= path to a file that contains data to process
Condition ::= WExp
WExp ::= Operand Lop Operand
Operand ::= Cast | Int | Float | Bool | String
Cast ::= Type "(" ColRef ")"
Type ::= "int" | "float" | "bool" | "str"
ColRef ::= "@"Int
Int ::= int constant
Float ::= float constant
Bool ::= "true" | "false"
String ::= "'"string"'"
Aop ::= "+" | "-"
Mop ::= "*" | "/"
Lop ::= "<" | ">" | "<=" | ">=" | "=" | "!="
Id ::= an identifier

关键字

本节包含关键字列表。

selectfromlimitwhereintfloatstrbooltruefalse

标量函数

本节包含标量函数列表。本节中的所有函数在给定参数类型不正确时都会报错。

upper(str)

  • 返回一个字符串,其中所有小写字母都被转换为对应的大写字母。如果参数为null,则返回null。

lower(str)

  • 返回一个字符串,其中所有大写字母都被转换为对应的小写字母。如果参数为null,则返回null。

length(str)

  • 返回字符串参数中的字符数。如果参数为null,则返回null。

rev(str)

  • 反转给定的参数字符串。如果参数为null,则返回null。

abs(int|float)

  • 计算参数的绝对值。如果参数为null,则返回null。

sign(int|float)

  • 返回给定数值参数的符号。如果参数为null,则返回null。

ceil(int|float)

  • 将给定数字四舍五入到大于或等于输入数字的整数。如果参数为null,则返回null。

floor(int|float)

  • 返回小于或等于给定参数的整数值。如果参数为null,则返回null。

round(int|float)

  • 将给定参数的数值四舍五入到整数。如果参数为null,则返回null。

cos(int|float)

  • 返回给定数值参数(以弧度为单位)的余弦值。如果参数为null,则返回null。

sin(int|float)

  • 返回给定数值参数(以弧度为单位)的正弦值。如果参数为null,则返回null。

聚合函数

本节包含聚合函数列表。

sum(int|float)

  • 返回非null值的总和。

count(any)

  • 返回非null值的数量。

max(int|float)

  • 找到最大数值。忽略null值。

min(int|float)

  • 找到最小数值。忽略null值。

avg(int|float)

  • 计算平均值。忽略null值。

贡献

请查看此页面

许可证

BSD-3-Clause许可证.

联系

如有任何评论,请随时联系:Milos Gligoric <milos.gligoric@gmail.com>

无运行时依赖