我有一个包含数据的输入文件
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;