Вывод изгиба трубы с окончанием Grep o Txt файл в Ruby - PullRequest
0 голосов
/ 28 января 2020

я столкнулся с проблемами при использовании curl в ruby. Я хочу запустить скрипт ruby, и он должен хранить объект типа JSON, подобный этому

{
    "remote":  [
        {"name": "cast-1",
         "id": 1212
        },
        {"name": "cast-1",
         "id": 1214
        },
        {"name": "home-11",
         "id": 3212
        },
        {"name": "cast-3",
         "id": 3212
        },
        {"name": "cast-3",
         "id": 3213
        },
        {"name": "cast-4",
         "id": 4211
        }

    ]
}

, в текстовом файле. Я сопоставил и записал ввод curl, чтобы получить нужные записи. Теперь, когда я запускаю скрипт, мой текстовый файл выскакивает пустым. пример того, что я попробовал

#ruby

`curl -m 10 -s -H '[...]' "https://example_with_json_file.com" | jq -r .remote | group_by(.name) | map({ (.[0].name): map(.id) }) | "\(.[])" | grep '3\|4\|11' > file.txt` 

foo = []

File.open(file.txt) do |file|
  foo = file.readlines
end
[...]

, запустив вышеуказанный ввод в моих темных работах. Я попытался использовать систему заказов Kernel.system в моем примере ruby. Ничего не помогло.

Как я могу передать этот вывод в текстовый файл

{"cast-3":[3212,3213]}
{"cast-4":[4211]}
{"home-11":[3212]}

Или вообще, можно ли запустить ввод curl в одну строку, которая исполняется с помощью ruby?

1 Ответ

0 голосов
/ 28 января 2020

Всегда лучше делать вещи на одном языке. Как:

response = HTTParty.get('https://path/to/json')
JSON.parse(response)
...

Если вы хотите смешать его с Bash, попробуйте:

bar = `curl -m 10 -s -H '[...]' "https://example_with_json_file.com" | jq -r .remote | group_by(.name) | map({ (.[0].name): map(.id) }) | "\(.[])" | grep '3\|4\|11'`
foo = bar.split(/\n/)
File.write('/path/to/file', bar)
...