У меня есть скрипт, который выводит (2 результаты показаны здесь)

Tag: tag_453672
  Path: /abc/hosts/server42/vol/tempfile.tmp
  Server host: server42
  Region: unix
  Active: NO
  View tag uuid:00fa63f2.81f211e2.9f28.00:14:4f:9a:d2:60

Tag: tag_453672
  Path: /abc/hosts/server42/vol/tempfile.tmp
  Server host: server42
  Region: unix
  Active: NO
  View tag uuid:00fa63f2.81f211e2.9f28.00:14:4f:9a:d2:60

....  

и я использую трубу greep для фильтрации результатов:

script | grep "Tag\|Active"

которые производят:

Tag: tag_453672
  Active: NO
Tag: tag_453672
  Active: YES

Есть ли возможность выводить каждый отфильтрованный результат в одну строку, как, в конце концов, через запятую?

Tag: tag_453672, Активный: НЕТ

Tag: tag_453672, Активен: ДА

3 ответа3

2

Perl решение:

./script | grep 'Tag\|Active' | perl -pe '/^Tag:/ and chomp'
1
script | grep "Tag\|Active" | awk 'NR%2==1{x=$0} NR%2==0{print x, $0}'

Хранит, когда встречается нечетная строка, печатает, когда четная строка. Можно сделать менее грубым, используя регулярное выражение вместо условий NR.

Еще один подход с AWK

script | awk '/^Tag/{x=$0} /^ *Active/{print x, $0}'
1

Ясс (еще одно решение для sed)

script | grep "Tag\|Active" | sed '$!N;s/\n/,/'

Другие sed-лайнеры на http://www-rohan.sdsu.edu/doc/sed.html

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .