парсинг результатов в bash - PullRequest
0 голосов
/ 05 октября 2018

У меня есть 2 запроса, которые дают мне результаты:

  1. сервис
  2. номер сервиса

пример:

root@:~/elo# cat test  | grep name | grep -v expand | cut -c 22- | rev | cut -c 3- | rev
service1
service2
root@:~/elo# cat test  | grep customfield |  cut -c 31- | rev | cut -c 2- | rev
2.3.4
55.66

Я хочу связать первое значение из первого запроса с первым значением из второго запроса и т. Д. В этом примере должно быть:

service1:2.3.4
service2:55.66

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

Без примера файла трудно написать рабочий пример.Но я вижу, что оба значения находятся в одном текстовом файле и в одной строке.Поэтому я бы использовал awk для этого:

$ cat text
service1;some_other_text;2.3.4
service2;just_some_text;55.66

$awk -F ";" '{printf "%s:%s\n",  $1, $3}' test 
service1:2.3.4

Для файла JSON было бы проще, если бы вы могли использовать jg (например, apt-get installjg):

$ cat test.json
[
  {
    "name": "service1",
    "customfield_10090": "1.2.3"
  },
  {
    "name": "service2",
    "customfield_10090": "23.3.2"
  }
]

$jq '.[] | .name + ":" + .customfield_10090' test.json | sed 's/"//g'
service1:1.2.3
service2:23.3.2

Sed необходим для удаления кавычек.

0 голосов
/ 05 октября 2018

Вы можете использовать paste:

paste -d: <(grep name test| grep -v expand | cut -c 22- | rev | cut -c 3- | rev) \
          <(grep customfield test |  cut -c 31- | rev | cut -c 2- | rev)

Но могут быть и лучшие способы.Если вводом является json, вы, вероятно, можете использовать jq для более короткого и эффективного решения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...