Dado o comando:
echo "[\"tag1\", \"[[Super\", \"Duppa\", \"Database\", \"Analyst]]\", \"tag2\"]" | jq -f ~/somefilter.jq
E o filtro:
def hasOne(x): x | (startswith("[[") or endswith("]]") );
def looparr(r): [ r | keys[] as $i | r[$i] | select(hasOne(.)) | $i ] ;
. as $arrray | $arrray |= .+ [ . as $arr | looparr($arr) | .[0] as $str | .[1] as $ed | $arr[$str:$ed+1] | join(" ") ] | del(.[$str:$ed+1])
somefilter.jq
Por que o del(.[$str:$ed+1])
não remove as strings que eu concatenava junto em seu próprio item?
Em vez disso, recebo o seguinte erro:
jq: error: str/0 is not defined at <top-level>, line 3:
. as $arrray | $arrray |= .+ [ . as $arr | looparr($arr) | .[0] as $str | .[1] as $ed | $arr[$str:$ed+1] | join(" ") ] | del(.[$str:$ed+1])
jq: error: ed/0 is not defined at <top-level>, line 3:
. as $arrray | $arrray |= .+ [ . as $arr | looparr($arr) | .[0] as $str | .[1] as $ed | $arr[$str:$ed+1] | join(" ") ] | del(.[$str:$ed+1])
Se eu derrubar | del(.[$str:$ed+1])
no final e substituí-lo por | .
... minha saída se tornará:
[
"tag1",
"[[Super",
"Duppa",
"Database",
"Analyst]]",
"tag2",
"[[Super Duppa Database Analyst]]"
]
Minha saída desejada é mais parecida com:
[
"tag1",
"tag2",
"[[Super Duppa Database Analyst]]"
]
Quando eu tento adicionar constantes, funciona muito bem, mas isso não torna meu script muito maleável (e pode não ser assim mesmo neste momento).
Existe alguma razão pela qual não consigo acessar $str
e $ed
?