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