Нужно манипулировать строковыми данными, используя bash

У меня есть данные, отображаемые на консоли в следующем формате:

 "name1",
 "value1",
 "name2",
 "value2",
 "name3",
 "value3",
 ...
 ...

Мне нужно как-то манипулировать этим выводом, чтобы он отображался в следующем формате:

 name1 : value1
 name2 : value2
 name3 : value3
 ...
 ...

Я не очень хорошо разбираюсь в сценариях оболочки, но я знаю, что мои варианты - sed, tr или awk (или комбинация вышеупомянутых). Я просто не могу понять, как сделать то, что мне нужно здесь. Заранее спасибо!

2 ответа

Решение

Труба это в:

 | sed 's/^ *"\|", *$//g' | paste -d: - -

sed, чтобы удалить кавычки, вставьте, чтобы объединить 2 последовательные строки вместе с двоеточием.

Гленн Джекманс paste Решение довольно элегантное, но я решил добавить другие решения.

С sed: sed -ne '1~2{s/$/ : /;N;s/[",]\|\n //g;p}'

Для каждой нечетной строки добавьте : до конца прочитайте следующую строку в текущем шаблонном пространстве (N), удалите все кавычки и запятые и сочетания новой строки + пробела и распечатайте.

С awk: awk '{gsub(/[",]|^ */,"")} NR%2{printf $0 " : "} !(NR%2)'

Замените все кавычки, запятые и строки, ведущие строки. Для всех нечетных строк (строк, где NR%2 ненулевой) добавить : и печатать без новой строки. Для всех четных строк (строк, где NR%2 ноль) печатать строку (заканчивая предыдущую строку).

Другие вопросы по тегам