linux,过滤并格式化 grep 结果

linux,过滤并格式化 grep 结果

我有一个输出脚本(这里显示 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_453672,有效:否

标签:tag_453672,有效:是

答案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}'

答案2

Perl 解决方案:

./script | grep 'Tag\|Active' | perl -pe '/^Tag:/ and chomp'

答案3

yass(另一个 sed 解决方案)

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

其他 sed 单行命令位于http://www-rohan.sdsu.edu/doc/sed.html

相关内容