Нужно манипулировать строковыми данными, используя 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
ноль) печатать строку (заканчивая предыдущую строку).