2017-06-08 11 views
-2

私はxmlから変換されたjsonファイルを持っています。私は、この問題を解決するためにbashスクリプトでjqを使用しようとしています。素晴らしい作品としかし、bashで、私はこれが無い決意で動作するように取得しようとする置換を使用しなければならなかったこれはしばらくの間でした

完璧な出力を示しjq -r '.users.user[0].id."#text"' cosmology18.jsonコマンドラインで

現在。

最初私は

baselineresult=$(jq -r '.users.user[1].cpid."#text"' $1) 

ユーザデータを読み取るために最初の部分を動作するようにその一部を得たが、私はデータをエコーすることが可能になる私は、それぞれが増加する$basecountを追加しようとすると、しかし完全に

を受け私はそれを動作させることができませんでしたので、私は、ユーザの[]に$ basecountを取得するために代用を使用しなければならなかったこのクレイジーメソッドを構築しました。

bracea="[" 
    braceb="]" 
    dquote='"' 
    squote="'" 
    pound="#" 
    echo test of command is jq -r "${squote}.users.user${bracea}${basecount}${braceb}.cpid.${dquote}#text${dquote}${squote} $1" 

    baselineresult=$(jq -r "${squote}.users.user${bracea}${basecount}${braceb}.cpid.${dquote}${pound}text${dquote}${squote} $1") 
    echo $baselineresult 

コマンドは、コマンドラインで入力したコマンドと一致します。

しかし、私はこれを取得する:コマンドの

テストはJQ -r 'で.users.user [0] .cpid "#テキスト"。' cosmology18.json JQ:エラー:構文エラー、予期しないINVALID_CHARACTER、 '[0] .cpid .users.user "#テキストは"。' cosmology18.json JQ:$端(?Unixシェルのクォートの問題)でのを期待して、1行目1コンパイルエラー

を任意のアイデアが...ありましたこれで今8時間。 出力がjq -r '.users.user [0] .idのコマンドラインで使用しているIDと同じであるため、この不正な文字は見つからないようです。 "#text"' cosmology18.json

+0

に残念ですJQ -r「$ {squote} .users.userの$ {bracea} $ {basecount} $ {braceb } .cpid。"$ {dquote} $ {pote} $ {dquote} $ {squote} $ 1"また、すべてのサブコミッションを使っていても、jqがbashが送信したものを受け入れるのに時間があります。だから、それはbashではなく、jethとsomethign –

+0

この行を修正することができます "最初に私はあなたの部分をユーザーデータを読むために働かせていますか?" –

+0

おそらく擬似コードでスクリプトが何をしたいか説明できますか? –

答えて

0

問題は、bashの構文とjqの構文が分からないため、それらを両方ともマージしていることです。

'.users.user[1].cpid."#text"' filename 

jqは、単一引用符を見ることになってされることはありません、彼らは「あなたの作業のコマンドで:

ここ
.users.user[1].cpid."#text" 

は、あなたがそれを与えているものです。ここで

jqが期待するものの一例ですどの文字列を jqに渡すかを指定するためのbash構文。代わりに、 jqに一重引用符を付けると、その意味が分かりません。

同様に、ファイル名に続くスペースは、2番目の引数を渡すことを指定するbash構文です。代わりに、最初の引数でjqにそれらを渡そうとしますが、それは期待しません。

jqこのコマンドは元のものと区別できません(同じパラメータを使用してexecve呼び出しが行われます)。あなたは別のインデックスを取得するには、変数を変えることができます:私は、コマンドのエコー検査上のエコーをtypoed

var=1 
baselineresult=$(jq -r '.users.user['"$var"'].cpid."#text"' "$1") 
+0

root @ iFoggz-s1:〜/ Downloads/snapshots/converted#jq - r '.users.user [0] .cpid。 "#text"' cosmol e64c6f0a50af958349a03ee08ab178f7 ogy18.json idは、端末で得るものですが、私はuが私は$ {} squote別名」を削除し、それが働いた –

+0

ウル権利を示している例にそれをいじくり回すしようとします。私の髪の95%が残っていることを本当にありがとう! –

関連する問題