2 个版本
0.3.2 | 2024 年 8 月 8 日 |
---|---|
0.3.1 | 2024 年 8 月 7 日 |
#460 在 数据库接口
219 每月下载量
85KB
2K SLoC
fqs - 文件查询
fqs
是一个用于编写文件查询的命令行工具。查询语法受到 SQL 的启发。在许多方面,fqs
与以下一个(或组合)类似:cut
、paste
、bc
、grep
和 awk
,但 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
关键字
本节包含关键字列表。
select
,from
,limit
,where
,int
,float
,str
,bool
,true
,false
。
标量函数
本节包含标量函数列表。本节中的所有函数在给定参数类型不正确时都会报错。
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值。
贡献
请查看此页面。
许可证
联系
如有任何评论,请随时联系:Milos Gligoric <milos.gligoric@gmail.com>
。