搜索模式并打印模式匹配行中的下一行

搜索模式并打印模式匹配行中的下一行

我有一个包含数据的输入文件

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;

相关内容