実際のコードにフィードする入力のバージョンを作成しようとしているときに、キーの値に大文字と小文字を区別するバージョンの文字列を含む文字列を「含む」ファイルを作成する必要があります。つまり、「contains」 「camfrog または tubemate、または soundcloud 」を実装するための正規表現を作成します。
サンプル JSON 入力:
{"appid":"537c6d4a9c4846b8bc44ebdf78ab8e2d","app_name":"TubeMate
YouTube Downloader","publisher_id":"1690d6387fcc441091a2f2d73f89709d"}
{"appid":"f8022204aaa7478a88fca1a417ddb125","app_name":"Camfrog
Android Smartphone","publisher_id":"085d0268a9674ce885a2f185ec895246"}
{"appid":"agltb3B1Yi1pbmNyDAsSA0FwcBih9tMUDA","app_name":"TuneIn Radio
- iPad","publisher_id":"agltb3B1Yi1pbmNyEAsSB0FjY291bnQYsv-PFAw"} {"appid":"537c6d4a9c4846b8bc44ebdf78ab8e2d","app_name":"TubeMate
YouTube Downloader","publisher_id":"1690d6387fcc441091a2f2d73f89709d"}
{"appid":"f8022204aaa7478a88fca1a417ddb125","app_name":"Camfrog
Android Smartphone","publisher_id":"085d0268a9674ce885a2f185ec895246"}
{"appid":"92255b8b662148e59973b8eca128adde","app_name":"SubwaySimulator3D","publisher_id":"0d78f4d244ec4309b4aa06cdfb871341"}
{"appid":"agltb3B1Yi1pbmNyDAsSA0FwcBjq_6EUDA","app_name":"TuneIn
Radio","publisher_id":"agltb3B1Yi1pbmNyEAsSB0FjY291bnQYsv-PFAw"}
{"appid":"f7cc119ca9e1426c8d162d2d37c8558f","app_name":"Android Skout
New","publisher_id":"agltb3B1Yi1pbmNyEAsSB0FjY291bnQY7cCnEgw"}
{"appid":"agltb3B1Yi1pbmNyDAsSA0FwcBim6MAVDA","app_name":"Draw
Something
Android","publisher_id":"agltb3B1Yi1pbmNyEAsSB0FjY291bnQYgYC-FQw"}
この Json 入力から、「Camfrog」のような名前を持つアプリをフィルタリングする必要があります (CAMFROG、camfrog .. などの可能性があるため、正規表現は大文字と小文字を区別しない必要があります。これに加えて、次のような一連の app_names を出力する必要があります。 「Camfrog」、「Tubemate」、「soundcloud」などと言ってください。jq のマニュアルをhttp://stedolan.github.io/jq/manual/で調べましたが、式を作成できませんでした。
これが私が試したことです-:
</home/ekta/Prototype1/sample.dat jq -c '{app_name:.app_name} |
match(["Camfrog", "ig"])'
map(select(.app.name like "%Camfrog%" ))
しかし、一致が定義されていないとコンパイルエラーが発生します。Jq内でこれを行うにはどうすればよいですか。
フォールバック -: これを pandas のデータフレームとしてロードし、そこで正規表現を実行できますが、私のファイルには本当に必要のないものがたくさんあるので、Jq ですばやくフィルター処理したいと思います。
アプリのフィルタリング後のサンプル出力 (元の出力と同じように、すべてのキー、値が必要です-:
{"appid":"537c6d4a9c4846b8bc44ebdf78ab8e2d","app_name":"TubeMate
YouTube Downloader","publisher_id":"1690d6387fcc441091a2f2d73f89709d"}
{"appid":"f8022204aaa7478a88fca1a417ddb125","app_name":"Camfrog
Android Smartphone","publisher_id":"085d0268a9674ce885a2f185ec895246"}
{"appid":"537c6d4a9c4846b8bc44ebdf78ab8e2d","app_name":"TubeMate
YouTube Downloader","publisher_id":"1690d6387fcc441091a2f2d73f89709d"}
{"appid":"f8022204aaa7478a88fca1a417ddb125","app_name":"Camfrog
Android Smartphone","publisher_id":"085d0268a9674ce885a2f185ec895246"}
PPS :一致する正規表現を作成するだけでなく、「釣り方を教えて」いただければ幸いです。
フォローアップの質問-:
また、サンプルの例をテストしようとすると、 jq manual のように -:
echo [{"foo": 1, "bar": 2}, {"foo": 1, "bar": 3}, {"foo": 4, "bar": 5}] | jq 'ユニーク(.foo)
エラー: 一意の引数が多すぎます (0 が必要ですが、1 を取得しました) unique(.foo)1 コンパイル エラー
jqマニュアルを読んでいる間、以下のようなサンプル例 -:
jq 'unique(.foo)' Input [{"foo": 1, "bar": 2}, {"foo": 1, "bar": 3}, {"foo": 4, "bar": 5}] Output [{"foo": 1, "bar": 2}, {"foo": 4, "bar": 5}]
ここで入力を他にどのように試す必要がありますか?
私が辞書を実際に構築している方法は、です</home/ekta/SamplePrototype.dat jq -c '{appid:.app.id,,app_name:.app.name,publisher_id:.app.publisher_id}'
が、jqマニュアルのようにテストしたいと思います。ここで私が間違っていることについての指針を教えてもらえますか?