如何折叠一列同时聚合另一列

如何折叠一列同时聚合另一列

我有以下输入数据:

student:xxxxx
student:yyyyy
student:zzzzz
student:kkkkk
student:.
teacher:aaaaa
teacher:bbbbb
teacher:lllll
teacher:.
student:sssss
student:mmmmm
student:.

我需要提取数据,如下所示:

student:xxxxx yyyyy zzzzz kkkkk.
teacher:aaaaa bbbbb lllll.
student:sssss mmmmm.

我怎样才能通过使用sed和来做到这一点awk

答案1

$ cat tst.awk
BEGIN { FS=":" }
{
    if ($2==".") {
        ORS = "\n"
        OFS = ""
        cnt = 0
    }
    else {
        ORS = ""
        OFS = " "
        cnt++
    }
    print (cnt==1 ? $0 : OFS $2)
}

$ awk -f tst.awk file
student:xxxxx yyyyy zzzzz kkkkk.
teacher:aaaaa bbbbb lllll.
student:sssss mmmmm.

如果不清楚其工作原理,您可以研究 Arnold Robbins 所著的《Effective Awk 编程》第四版一书中使用的所有结构。

答案2

一个sed办法:

/:\./! { s/^.*://; H }
/:\./  { G; s/\n/ /g; s/\. //; s/$/./p; s/.*//; x }

相关内容