다른 열을 집계하는 동안 한 열을 축소하는 방법

다른 열을 집계하는 동안 한 열을 축소하는 방법

다음과 같은 입력 데이터가 있습니다.

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 }

관련 정보