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

Join next lines with space or semicolumn seperated till it matches the pattern

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

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;;

这个 awk 单行代码可以完成这项工作:

awk '{printf "%s%s",(NR>1&&/^Data for SU/?RS:""),[=10=]}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:""),[=11=]}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;;