加入下一行,用空格或分号分隔,直到它与模式匹配

时间:2015-03-11 20:08:39

标签: shell unix awk scripting

我正在寻找类似下面的输出。

Data for SUDO 'touch'
    test           (GROUP  ) X
    users           (GROUP  ) X
Comment           : /usr/bin/touch
Data for SUDO 'wc'
    test           (GROUP  ) X
Comment           : /usr/bin/wc
Data for SUDO 'reclaim-files'
Comment           : /etc/uidchanges/reclaim-files;;

我的输出应该是:

Data for SUDO 'touch'+    test           (GROUP  ) X+    users           (GROUP  ) X+Comment           : /usr/bin/touch
Data for SUDO 'wc'+    test           (GROUP  ) X;Comment           : /usr/bin/wc
Data for SUDO 'reclaim-files'+Comment           : /etc/uidchanges/reclaimfiles;;

1 个答案:

答案 0 :(得分:1)

这个awk one-liner完成了这项工作:

awk '{printf "%s%s",(NR>1&&/^Data for SU/?RS:""),$0}END{print ""}' file

用你的例子测试:

kent$  cat f
Data for SUDO 'touch'
    test           (GROUP  ) X
    users           (GROUP  ) X
Comment           : /usr/bin/touch
Data for SUDO 'wc'
    test           (GROUP  ) X
Comment           : /usr/bin/wc
Data for SUDO 'reclaim-files'
Comment           : /etc/uidchanges/reclaim-files;;

kent$  awk '{printf "%s%s",(NR>1&&/^Data for SU/?RS:""),$0}END{print ""}' f
Data for SUDO 'touch'    test           (GROUP  ) X    users           (GROUP  ) XComment           : /usr/bin/touch
Data for SUDO 'wc'    test           (GROUP  ) XComment           : /usr/bin/wc
Data for SUDO 'reclaim-files'Comment           : /etc/uidchanges/reclaim-files;;