1

次のような CSV ログ ファイルがあります。

{"locale":"en_US","action":null,"name_id":4820951,"time":80239874928,"focus":disabled,"end_data":false}

後に来るものだけを抽出したいname_idので、出力は 4820951 になります。sed または awk でこれを行う方法はありますか?

私はUNIXスクリプトを初めて使用するので、助けていただければ幸いです。

4

4 に答える 4

2

そして、かなり単純なawk解決策も。

awk -F: '/name_id/ {print $2}' RS=, file
4820951
于 2013-10-31T20:41:26.110 に答える
2

本当に面白い解決策が必要な場合:

これはのようです。では、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の代わりに を試すこともできますがgjsrhinoはるかに遅くなります。YYMV。

于 2013-10-31T21:34:28.003 に答える