パターンを検索し、パターンに一致する行から次の行を印刷します。

パターンを検索し、パターンに一致する行から次の行を印刷します。

データを含む入力ファイルがあります。

cell1
input a;
input a2;
input b;
output z;
cell2 
input a1;
input a2;
output zn;
cell3 
input a1;
input a2;
input b1;
output z;

私の出力データは次のようになりたいです。

cell1(a,a2,b,z);
input a;
input a2;
input b;
output z;
cell2 (a1,a2,zn);
input a1;
input a2;
output zn;
cell3 (a1,a2,b1,z);
input a1;
input a2;
input b1;
output z;

私はセルを検索することから始め、セルが見つかったら、次のセルが表示されるまで$ 2セルの後ろの対応するセルから次の行を印刷()し、繰り返すアイデアから始めました。しかし、実行に問題があります。

私はコードを試しました

awk ' /cell/{if (NR >1) print cell , line; cell = 0;line =0} { line= $4} END { print cell, line }' file 

このコードを実行すると、次の結果が表示されます。

cell1 0
cell2 0

ベストアンサー1

tacこのスクリプトを使用すると、ファイルを逆に解析できますawk

tac file | awk '
    /^cell/ {print $0 "(" args ");"; args = ""; next}
    {print; gsub(";","",$2); args = (args ? $2 "," args : $2)}
' | tac

サンプル入力でテストすると、次の出力が得られます。

cell1(a,a2,b,z);
input a;
input a2;
input b;
output z;
cell2 (a1,a2,zn);
input a1;
input a2;
output zn;
cell3 (a1,a2,b1,z);
input a1;
input a2;
input b1;
output z;

おすすめ記事