次のコマンドを実行します。
echo '["tag1", "[[Super", "Duppa", "Database", "Analyst]]", "tag2"]' | jq -f ~/somefilter.jq
とjq
フィルタ(~/somefilter.jq
):
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])
del(.[$str:$ed+1])
接続したばかりの文字列を自分のアイテムとして削除したらどうなりますか?
代わりに、次のエラーが発生します。
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])
| del(.[$str:$ed+1])
最後に削除して置き換えると、| .
出力は次のようになります。
[
"tag1",
"[[Super",
"Duppa",
"Database",
"Analyst]]",
"tag2",
"[[Super Duppa Database Analyst]]"
]
私が望む出力は次のとおりです。
[
"tag1",
"tag2",
"[[Super Duppa Database Analyst]]"
]
定数を追加しようとするとうまくいきますが、スクリプトは非常に柔軟になりません(おそらく現在ではそうではありません)。
$str
にアクセスできない理由がありますか$ed
?
ベストアンサー1
問題は、これらの変数がにあるため範囲外です[]
。jq
しかし、以下はコードを複製して正解を提供するようです。
. as $arr |
looparr($arr) |
.[0] as $str |
.[1] as $ed |
$arr |
del(.[$str:$ed+1])
+ [
. as $arr |
looparr($arr) |
.[0] as $str |
.[1] as $ed |
$arr[$str:$ed+1] |
join(" ")
]