データを含む入力ファイルがあります。
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;