взять из строки 1 вывод команды, разбить ее и поместить в новый файл построчно - PullRequest
0 голосов
/ 08 февраля 2012

Если я получаю вывод от команды, которая выводит информацию следующим образом:

{"value1":"value2","value3":"value4","value5":10001,"value6":999.99,}

Есть ли способ передать это значение в grep / awk и заставить его создать новый файл, который помещаетинформация в файле с 1 значением в строке

, поэтому в идеале вывод, который я искал бы в этом файле, читал бы

value1
value2
value3
value4
value5: 10001
value6: 999.99

.

Ответы [ 2 ]

0 голосов
/ 08 февраля 2012

Ну, вы ожидаете немного странного вывода ... в любом случае, с sed:

$ echo '{"value1":"value2","value3":"value4","value5":10001,"value6":999.99,}' | sed '{ s/[\{"\}]//g ; s/,/\n/g ; s/:\([^0-9]\)/\n\1/g; s/:\([0-9]\)/: \1/g}'                                                                     
value1
value2
value3
value4
value5: 10001
value6: 999.99
0 голосов
/ 08 февраля 2012

Вход выглядит как JSON. Если это так, вам, вероятно, следует проанализировать его как JSON, используя существующую библиотеку для языка по вашему выбору (я бы сам использовал Ruby).

Но если входной формат прост (например, строки в кавычках не содержат ничего, что могло бы потребовать сложного анализа), вы можете уйти с чем-то простым, например:

awk -F , '{ gsub(/(^{)|(}$)|"/, ""); for (i = 1; i <= NF; ++i) print $i }'

(Обратите внимание, что на самом деле это не совсем то, что вам нужно, и оно ломается, если внутри строк в кавычках есть запятые. При необходимости измените, если вы идете по этому пути.)

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