grep -o を使用して改行を克服します。

grep -o を使用して改行を克服します。

次のファイルがあります。

{
  "1": {
    "state": "RUNNING",
    "stats": {
      "name": "some-file",
      "uris": [
        "some-example.com"
      ],
      "host": "127.0.0.1",
      "port": 8080,
      "uptime": 168,
      "mem_quota": 2147483648,
      "disk_quota": 2147483648,
      "fds_quota": 16384,
      "usage": {
        "time": "2016-09-13 07:39:40 +0000",
        "cpu": 0.30315522606369516,
        "mem": 1069568000,
        "disk": 237203456
      }
    }
  },
  "0": {
    "state": "RUNNING",
    "stats": {
      "name": "some-file2",
      "uris": [
        "some-example-e.com"
      ],
      "host": "127.0.0.2",
      "port": 8081,
      "uptime": 169,
      "mem_quota": 2147483648,
      "disk_quota": 2147483648,
      "fds_quota": 16384,
      "usage": {
        "time": "2016-09-13 07:39:40 +0000",
        "cpu": 0.3086296386531593,
        "mem": 1073180672,
        "disk": 237203456
      }
    }
  },
  "2": {
    "state": "RUNNING",
    "stats": {
      "name": "some-file3",
      "uris": [
        "some-example.com"
      ],
      "host": "127.1.20.3",
      "port": 8190,
      "uptime": 168,
      "mem_quota": 2147483648,
      "disk_quota": 2147483648,
      "fds_quota": 16384,
      "usage": {
        "time": "2016-09-13 07:39:40 +0000",
        "cpu": 0.31213565359044587,
        "mem": 1072861184,
        "disk": 237203456
      }
    }
  }
}

cpu、mem、diskの値を抽出して、次の形式のファイルに入れる必要があります。

0.30315522606369516,1069568000,237203456,0.3086296386531593,1073180672

基本的にはそうしなければならない

first_instance_cpu,first_instance_mem,first_instance_disk,second_instance_cpu,second_instance_mem...

私はあなたがこれを理解することを願っています。

grepこれらの値を取得するには、次の文を使用します。

grep -Eow '"(cpu|mem|disk)": [0-9.]+' SampleOutput | grep '[0-9.]'

これは私に次のような結果を与えます

"cpu": 0.30315522606369516
"mem": 1069568000
"disk": 237203456
"cpu": 0.3086296386531593
"mem": 1073180672
"disk": 237203456
"cpu": 0.31213565359044587
"mem": 1072861184
"disk": 237203456

数字(一致)を赤で強調表示したいです。数字だけが必要ですが、-o2番目のgrepコマンドでそのオプションを使用するともちろん数字が得られますが、各数字は以下のように別の行にあります。

0
.
3
3
1

...など。

他の行で少なくとも整数である結果を取得するには?その後、trなどを使用してコンマで区切ることができます。

ベストアンサー1

ファイルはJSON形式なので、次を使用します。ジャック:

jq '
    flatten |
    map(.stats.usage | del(.time)) |
    map([.cpu, .mem, .disk]) |
    flatten |
    .[]' <file.json | \
paste -sd ,

出力:

0.30315522606369516,1069568000,237203456,0.3086296386531593,1073180672,237203456,0.31213565359044587,1072861184,237203456

おすすめ記事