bash—使用shell扩展在字符串中向pig传递参数

7fhtutme  于 2021-06-21  发布在  Pig
关注(0)|答案(1)|浏览(515)

在Pig身上,这个怎么在壳里传递

{20160218,20160219,20160220,20160221,20160222,20160223,20160224}

外壳代码如下:

pig -f cart_abandonment.pig -param input='{20160218..20160224}'

使用扩展函数?上述方法不起作用,因为单引号省略了扩展。
如果没有单引号,似乎只有20160218通过。Pig的脚本如下:

list = load '/inserteddate={$input}' 
    USING com.twitter.elephantbird.pig.load.JsonLoader('-nestedLoad') as cartjson:map[];
pu82cl6c

pu82cl6c1#

尝试双引号命令替换( $(...) ):

pig -f cart_abandonment.pig -param input="$(echo {20160218..20160224} | tr ' ' ',')"

正如您所发现的,大括号展开只有在未加引号的情况下才有效。
但是,为了传递它生成的所有数字作为option参数的一部分 input= ,数字列表必须双引号。
这是通过使用命令替换来实现的( $(...) )生成双引号的数字列表(并将其回显到stdout,由命令替换捕获),以便shell将其输出视为单个字,以便 input=num1 num2 ... 形成单个选项参数。 pig 在这种情况下需要逗号分隔的值,而大括号扩展传递给 echo 结果是以空格分隔的值,因此需要将空格转换为逗号 tr ' ' ',' .

相关问题