在jq脚本中设置“-R”原始数据选项

在jq脚本中设置“-R”原始数据选项,jq,Jq,我们正在尝试用bash脚本编写一个通用数据处理器,该脚本使用jq进行部分处理。一个jq脚本文件作为配置选项传递给脚本,这是除了管道输入之外我们唯一想转发到jq的东西 我们希望能够将csv和json作为输入数据进行处理,并将逻辑完全包含在jq脚本中。但是,对于csv解析,我们需要设置-R选项,该选项设置在脚本之外(作为命令行参数) 是否可以在jq脚本中以某种方式设置-R选项 是否可以在jq脚本中以某种方式设置-R选项 没有 但是,有两种变通方法,如下所示。这些假设是CSV文件的第一行不是有效的JS

我们正在尝试用bash脚本编写一个通用数据处理器,该脚本使用
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
'