2015-03-26 3 views
1

я данные отображаются на консоли в следующем формате:нужно манипулировать строки данных с использованием Баша

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

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

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

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

ответ

3

Pipe его в:

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

SED, чтобы удалить кавычки, наклеить соединить 2 последовательных линий вместе с двоеточием.

+0

Отлично! Я боролся с частью «пасты» этой проблемы - никогда не использовал ее раньше, поэтому я не знал, что команда существует. Спасибо @glenn – p0ptha5tack

1

Решение paste glenn jackmans довольно элегантно, но я подумал, что я бы выбрал некоторые другие решения.

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

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

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

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

Смежные вопросы