Схватывать стоимость url

Я пробую делать в bash рукописный шрифт с тем, который может получать стоимость одной унифицированный указатель ресурса. Например, в этом url есть часть, которую он говорит "percent", в чем я нуждаюсь, состоит в том, чтобы схватывать это число.

Искренне у меня нет большого количества опыта в bash, так что любая помощь хорошо получена.

Это - то, что у меня есть в моем рукописном шрифте:

#!/bin/bash 
content=$(curl -L url) 
echo $content

Он возвращает мне следующую цепь:

{"percent":"13.29471501108489","count":1859}

Я нуждаюсь в том, чтобы извлечь стоимость percent.

7
задан 06.04.2016, 19:36
4 ответа

Ты можешь использовать jq, в твоем примере оно было бы нечто похожим:

#! /bin/bash
content="{\"percent\":\"13.29471501108489\",\"count\":1859}"
echo $content

Это только было, чтобы производить тот же ответ, который он производит curl, сейчас давайте извлекать стоимость:

percentValue=$(echo $content | jq ".[\"percent\"]")
echo $percentValue

С этим ты получишь результат, который ты желаешь:

"13.29471501108489"

Если бы ты захотел стоимость без кавычек, ты можешь добавлять решение 'tr:

percentValue=$(echo $content | jq .[\"percent\"] | tr -d '"')

Здесь полный пример:

#! /bin/bash
content="{\"percent\":\"13.29471501108489\",\"count\":1859}"
echo $content
percentValue=$(echo $content | jq ".[\"percent\"]")
echo $percentValue

Сейчас полный пример с curl:

#!/bin/bash 
content=$(curl -L url) 
echo $content
percentValue=$(echo $content | jq ".[\"percent\"]")
echo $percentValue

Чтобы устанавливать jq ты можешь вести себя здесь, но если ты находишься в OSX, это так легко как:

brew install jq

В Ubuntu это было бы так:

sudo apt-get install jq
1
ответ дан 24.11.2019, 14:37

Как с немножко Пайтона?

С конечной остановки:

$ echo '{"percent": "13.29471501108489", "count": 1859}' | python -c "import json, sys; print json.load(sys.stdin)['percent']"
13.29471501108489

В твоем рукописном шрифте он был бы:

#!/bin/bash 
content=$(curl -L url) 
echo $content | python -c "import json, sys; print json.load(sys.stdin)['percent']"

Если рукописный шрифт называется, например, percent.sh результат был бы:

$ bash percent.sh
13.29471501108489

Ты не нуждаешься в больше ничем, выборе -c Пайтона он позволяет тебе выполнять код с текста. Потом, просто я использую книжный магазин json для parsear цепь и превращать ее в словарь и книжный магазин sys чтобы читать с STDIN:

import json, sys;

В конце концов только я печатаю ключ percent словаря, который был создан, всего этого в том же решении:

print json.load(sys.stdin)['percent']
2
ответ дан 24.11.2019, 14:37
  • 1
    Gracas из-за ответа! я комментирую тебе, он дает мне эту ошибку Филе " < string> " line 1 import json, sys; print json.load (sys.stdin) [и #39; percent и # 39;] ^ IndentationError: unexpected indent сейчас я ищу, чтобы видеть, что он может быть. – Cristian Sanchez 07.04.2016, 14:52
  • 2
    @CristianSanchez mmmm редко, так как не быть должным, и # 237; когда - indentaci и # 243; n, потому что все в самой l и # 237; nea – César 07.04.2016, 15:16
  • 3
    поскольку я разобрался в ошибке, он говорит мне, что не определена ни в какой стороне переменная " percent" сейчас я ищу немного большего количества info – Cristian Sanchez 07.04.2016, 16:32
  • 4
    @CristianSanchez он говорит, что это ошибка indentaci и # 243; n, но не tendr и # 237; в который она быть, потому что каждое решение принадлежит одной l и # 237; nea – César 07.04.2016, 16:35
  • 5
    @C и # 233; sar: эта ошибка появляется, если есть место / табуляторы перед import. – ninjalj 08.04.2016, 22:17

Ну, я комментирую им, что немного, в конце концов я сделал это этой формой:

#!/usr/bin/python
import requests
from sys import exit

threshold = 8
r = requests.get('url') 
rj = r.json()
print rj['data']['percent']
if rj['data']['percent'] > threshold:  print 1
else:  print 0

так, я функционирует хорошо, если он преодолевает threshold, бросает 1, если не, 0, я сейчас только имею общее, как объединение этого в nagios!

Спасибо за помощь всех!

1
ответ дан 24.11.2019, 14:37

Perl включает модуль JSON:: PP (с Perl 5.14), чтобы обрабатывать информацию с JSON:

echo $content | perl -MJSON::PP -0777 -e 'print decode_json(<>)->{"percent"}'

JSON:: PP - осуществление JSON в Perl. В CPAN доступен модуль JSON:: XS, который осуществляет тот же интерфейс, что и JSON:: PP, но концентрируясь на исправлении и скорости (он написан в C).

1
ответ дан 24.11.2019, 14:37

Теги

Похожие вопросы