我有以下输入数据:
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 }