次の入力データがあります。
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プログラミング、第4版で使用されているすべての構成を研究できます。
答え2
一方sed
通行:
/:\./! { s/^.*://; H }
/:\./ { G; s/\n/ /g; s/\. //; s/$/./p; s/.*//; x }