在jq脚本中设置“-R”原始数据选项
我们正在尝试用bash脚本编写一个通用数据处理器,该脚本使用在jq脚本中设置“-R”原始数据选项,jq,Jq,我们正在尝试用bash脚本编写一个通用数据处理器,该脚本使用jq进行部分处理。一个jq脚本文件作为配置选项传递给脚本,这是除了管道输入之外我们唯一想转发到jq的东西 我们希望能够将csv和json作为输入数据进行处理,并将逻辑完全包含在jq脚本中。但是,对于csv解析,我们需要设置-R选项,该选项设置在脚本之外(作为命令行参数) 是否可以在jq脚本中以某种方式设置-R选项 是否可以在jq脚本中以某种方式设置-R选项 没有 但是,有两种变通方法,如下所示。这些假设是CSV文件的第一行不是有效的JS
jq
进行部分处理。一个jq
脚本文件作为配置选项传递给脚本,这是除了管道输入之外我们唯一想转发到jq
的东西
我们希望能够将csv
和json
作为输入数据进行处理,并将逻辑完全包含在jq
脚本中。但是,对于csv
解析,我们需要设置-R
选项,该选项设置在脚本之外(作为命令行参数)
是否可以在jq
脚本中以某种方式设置-R
选项
是否可以在jq脚本中以某种方式设置-R选项
没有
但是,有两种变通方法,如下所示。这些假设是CSV文件的第一行不是有效的JSON。使用第二种技术,除了无条件地将整个文件读入内存的相关成本外,效率损失应该最小
使用来自JSON的
在这种情况下,一旦确定输入不是JSON,就会切换到CSV处理模式
例子
使用--rawfile和输入
如果可能,可以从输入读取,否则切换到从--rawfile指定的文件读取
例子
0);
试试抓把手
'
如果使用第二种技术,对性能的影响应该很小,但请注意--rawfile将无条件地将整个文件读入内存。如果使用第一种技术,性能影响将取决于各种因素。
jq -Rs '. as $in
| try fromjson
catch ($in | splits("\n") | split(",") | select(length>0))'
< inputfile jq -n --rawfile raw inputfile '
def handleCSV: $raw | splits("\n") | split(",") | select(length>0);
try inputs catch handleCSV
'