次のような CSV ログ ファイルがあります。
{"locale":"en_US","action":null,"name_id":4820951,"time":80239874928,"focus":disabled,"end_data":false}
後に来るものだけを抽出したいname_id
ので、出力は 4820951 になります。sed または awk でこれを行う方法はありますか?
私はUNIXスクリプトを初めて使用するので、助けていただければ幸いです。
そして、かなり単純なawk
解決策も。
awk -F: '/name_id/ {print $2}' RS=, file
4820951
本当に面白い解決策が必要な場合:
これはjsonのようです。では、JavaScript インタープリターを使用してみませんか? gnome-shell を実行している場合はgjs
インストールされています (そうでない場合は、JS インタープリターもあるかもしれません)。とgjs
:
gjs -c 'var disabled="disabled";print({"locale":"en_US","action":null,"name_id":4820951,"time":80239874928,"focus":disabled,"end_data":false}.name_id);'
それが機能するように定義するdisabled
必要がありました。
いいですね。
同様の行でいっぱいの完全なファイルがある場合:
while read -r l; do
printf -v c 'var disabled="disabled"; print(%s.name_id);' "$l"
gjs -c "$c"
done < file
これは最も効率的ではありませんが、データが常に適切に解析されていることを確認できます。:)
.
rhino
の代わりに を試すこともできますがgjs
、rhino
はるかに遅くなります。YYMV。