awkを使用した行のマージ

awkを使用した行のマージ

次のパターンで、多くのデータを含む入力ファイルがあります。一部のデータは次のとおりです。

Data1 
C
In;
CP
In;
D
In;
Q
Out;
Data2 
CP
In;
D
In;
Q
Out;
Data3 
CP
In;
CPN
In;
D
In;
QN
Out;

私の出力

Data1(C,CP,D,Q)
In C;
In CP;
In D;
Out Q;
Data2 (CP,D,Q)
In CP;
In D;
Out Q;
Data3 (CP,CPN,D,QN)
In CP;
In CPN;
In D;
Out QN;

どうすればいいですか?

ベストアンサー1

$ cat tst.awk
BEGIN { FS="[[:space:];]+" }
{ rec[++nf] = $1 }
$1 == "Out" {
    printf "%s(", rec[1]
    for (i=2; i<=nf; i+=2) {
        printf "%s%s", (i>2 ? "," : ""), rec[i]
    }
    print ")"

    for (i=2; i<=nf; i+=2) {
        print rec[i+1], rec[i] ";"
    }

    delete rec
    nf = 0
}

$ awk -f tst.awk file
Data1(C,CP,D,Q)
In C;
In CP;
In D;
Out Q;
Data2(CP,D,Q)
In CP;
In D;
Out Q;
Data3(CP,CPN,D,QN)
In CP;
In CPN;
In D;
Out QN;

おすすめ記事