"sid"
for VALUE1
(=)789069
以降の値を一致させたい。
問題は、行の順序がランダムであることです。
[{"cid":"PWER","data":[{"VALUE1":0}],"sid":"789069","units":"kWm","age":586667},
{"cid":"PWER","data":[{"VALUE2":809}],"sid":"788325","units":"kWm","age":11},
{"cid":"PWER_SUB","data":[{"VALUE3":278}],"sid":"789540","units":null,"age":1},
{"cid":"PWER_SUB","data":[{"VALUE4":319}],"sid":"789093","units":null,"age":38},
{"cid":"PWER_SUB","data":[{"VALUE5":0}],"sid":"789069","units":null,"age":4}
それを一致させる方法についてのアイデアはありますか?
答え1
答え2
Grepはこのような問題を解決するための素晴らしいツールです
grep -oP '"sid":"\d+"' file
。これはあなたが望むものですか?
修正する:そうではありません! ! ! (申し訳ありません:元の質問を理解できませんでした。)
2番目のバージョン:次のjsonツールを使用してくださいjson
。
cat a.json | json -c '"VALUE1" in this.data[0]' | json -a sid
または
cat a.json | json -c '"VALUE1" in this.data[0]' -a sid
json -c predicate
- フィルタエレメント(フィルタ)json -a expression
- すべての要素(マップ)に式を適用する
マニュアルは次の場所にあります。http://trentm.com/json/。インストールされていない場合:
install node
and sudo npm install -g json
答え3
レコード全体を一致させるには、awk
次のものを使用できます。
awk '{if($0~/789069/){print $0}}' file
このコードでは、awk
行に値が含まれていることを確認してから789069
そのまま印刷し、他の行は無視します。
出力:
[{"cid":"PWER","data":[{"VALUE1":0}],"sid":"789069","units":"kWm","age":586667},
{"cid":"PWER_SUB","data":[{"VALUE5":0}],"sid":"789069","units":null,"age":4}