我希望你们所有人都有一个美好的新年!
我正在尝试在文件的特定块中交换2列。文件格式为:
Startpoint: in11 (input port)
Endpoint: out421 (output port)
Path Group: (none)
Path Type: max
Point Incr Path
---------------------------------------------------------------
input external delay 0.00 0.00 r
in11 (in) 0.00 0.00 r
Ckt432/A[7] (TopLevel432b) 0.00 0.00 r
Ckt432/M1/A[7] (PriorityA) 0.00 0.00 r
Ckt432/M1/U7/Y (INVX1_RVT) 0.03 0.03 f
Ckt432/M5/U12/Y (OA21X1_RVT) 0.10 2.44 r
Ckt432/M5/Chan[3] (DecodeChan) 0.00 2.44 r
Ckt432/Chan[3] (TopLevel432b) 0.00 2.44 r
out421 (out) 0.00 2.44 r
data arrival time 2.44
---------------------------------------------------------------
(Path is unconstrained)
Startpoint: in37 (input port)
Endpoint: out421 (output port)
Path Group: (none)
Path Type: max
Point Incr Path
---------------------------------------------------------------
input external delay 0.00 0.00 r
in37 (in) 0.00 0.00 r
Ckt432/A[5] (TopLevel432b) 0.00 0.00 r
Ckt432/M1/A[5] (PriorityA) 0.00 0.00 r
Ckt432/M1/U8/Y (INVX1_RVT) 0.03 0.03 f
Ckt432/M1/U13/Y (NAND2X0_RVT) 0.06 0.10 r
Ckt432/M5/U12/Y (OA21X1_RVT) 0.10 2.44 r
Ckt432/M5/Chan[3] (DecodeChan) 0.00 2.44 r
Ckt432/Chan[3] (TopLevel432b) 0.00 2.44 r
out421 (out) 0.00 2.44 r
data arrival time 2.44
---------------------------------------------------------------
(Path is unconstrained)
我正在尝试
将第5列替换为第2列。如果第5列中的字母为r
,则会将其替换为v
。如果第5列中的字母为f
,则会将其替换为^
。
在第1列中插入两个双引号。
用;
用//
这应该只在定义起始行和结束行的块中完成 - input external delay
,data arrival time
。
此外,我想用预定义的文本在块之前/之后更改文本。
我的预期输出应为:
$path {
// from: in11
// to: out432
$name "test_1" ;
$cycle 1 ;
$slack -0.130978 ;
$transition {
"in11" v ; // (in)
"Ckt432/A[7]" v ; // (TopLevel432b)
"Ckt432/M1/A[7]" v ; // (PriorityA)
"Ckt432/M1/U7/Y" ^ ; // (INVX1_RVT)
"Ckt432/M5/U12/Y" v ; // (OA21X1_RVT)
"Ckt432/M5/Chan[3]" v ; // (DecodeChan)
"Ckt432/Chan[3]" v ; // (TopLevel432b)
"out421" v ; // (out)
}
}
$path {
// from: in11
// to: out432
$name "test_2" ;
$cycle 1 ;
$slack -0.130978 ;
$transition {
"in37" v ; // (in)
"Ckt432/A[5]" v ; // (TopLevel432b)
"Ckt432/M1/A[5]" v ; // (PriorityA)
"Ckt432/M1/U8/Y" ^ ; // (INVX1_RVT)
"Ckt432/M1/U13/Y" v ; // (NAND2X0_RVT)
"Ckt432/M5/U12/Y" v ; // (OA21X1_RVT)
"Ckt432/M5/Chan[3] " v ; // (DecodeChan)
"Ckt432/Chan[3] " v ; // (TopLevel432b)
"out421" v ; // (out)
}
}
目前,我可以交换列,但我不知道如何仅在块中使用它们。我的代码是:
awk ' { c1 = $1; c2 = $2; $1 = " \" "; $2 = c1; $3 = " \" "; $4 = $5; $5 = " ; // "; $6 = c2; print; } ' file1.txt
非常感谢任何帮助。
答案 0 :(得分:1)
awk
救援!
让我们一步一步地实现它,首先提取感兴趣的数据
$ awk '/data arrival time/{f=0} f; /input external delay/{f=1}' file
in11 (in) 0.00 0.00 r
Ckt432/A[7] (TopLevel432b) 0.00 0.00 r
Ckt432/M1/A[7] (PriorityA) 0.00 0.00 r
Ckt432/M1/U7/Y (INVX1_RVT) 0.03 0.03 f
Ckt432/M5/U12/Y (OA21X1_RVT) 0.10 2.44 r
Ckt432/M5/Chan[3] (DecodeChan) 0.00 2.44 r
Ckt432/Chan[3] (TopLevel432b) 0.00 2.44 r
out421 (out) 0.00 2.44 r
in37 (in) 0.00 0.00 r
Ckt432/A[5] (TopLevel432b) 0.00 0.00 r
Ckt432/M1/A[5] (PriorityA) 0.00 0.00 r
Ckt432/M1/U8/Y (INVX1_RVT) 0.03 0.03 f
Ckt432/M1/U13/Y (NAND2X0_RVT) 0.06 0.10 r
Ckt432/M5/U12/Y (OA21X1_RVT) 0.10 2.44 r
Ckt432/M5/Chan[3] (DecodeChan) 0.00 2.44 r
Ckt432/Chan[3] (TopLevel432b) 0.00 2.44 r
out421 (out) 0.00 2.44 r
添加列替换,单独的部分等。
$ awk '/data arrival time/{f=0;print""}
f{sub("r","v",$5);
sub("f","^",$5);
print $1,$5 " ; // " $2 }
/input external delay/{f=1}' file
in11 v ; // (in)
Ckt432/A[7] v ; // (TopLevel432b)
Ckt432/M1/A[7] v ; // (PriorityA)
Ckt432/M1/U7/Y ^ ; // (INVX1_RVT)
Ckt432/M5/U12/Y v ; // (OA21X1_RVT)
Ckt432/M5/Chan[3] v ; // (DecodeChan)
Ckt432/Chan[3] v ; // (TopLevel432b)
out421 v ; // (out)
in37 v ; // (in)
Ckt432/A[5] v ; // (TopLevel432b)
Ckt432/M1/A[5] v ; // (PriorityA)
Ckt432/M1/U8/Y ^ ; // (INVX1_RVT)
Ckt432/M1/U13/Y v ; // (NAND2X0_RVT)
Ckt432/M5/U12/Y v ; // (OA21X1_RVT)
Ckt432/M5/Chan[3] v ; // (DecodeChan)
Ckt432/Chan[3] v ; // (TopLevel432b)
out421 v ; // (out)
现在,捕获输入,输出并在第一个字段中添加引号
$ awk -v q="\"" '/Startpoint:/{input=$2}
/Endpoint:/{output=$2}
/data arrival time/{f=0;print""}
f{sub("r","v",$5);
sub("f","^",$5);
print q $1 q, $5 " ; // " $2 }
/input external delay/{f=1; print input; print output}' file
in11
out421
"in11" v ; // (in)
"Ckt432/A[7]" v ; // (TopLevel432b)
"Ckt432/M1/A[7]" v ; // (PriorityA)
"Ckt432/M1/U7/Y" ^ ; // (INVX1_RVT)
"Ckt432/M5/U12/Y" v ; // (OA21X1_RVT)
"Ckt432/M5/Chan[3]" v ; // (DecodeChan)
"Ckt432/Chan[3]" v ; // (TopLevel432b)
"out421" v ; // (out)
in37
out421
"in37" v ; // (in)
"Ckt432/A[5]" v ; // (TopLevel432b)
"Ckt432/M1/A[5]" v ; // (PriorityA)
"Ckt432/M1/U8/Y" ^ ; // (INVX1_RVT)
"Ckt432/M1/U13/Y" v ; // (NAND2X0_RVT)
"Ckt432/M5/U12/Y" v ; // (OA21X1_RVT)
"Ckt432/M5/Chan[3]" v ; // (DecodeChan)
"Ckt432/Chan[3]" v ; // (TopLevel432b)
"out421" v ; // (out)
等等。我想你可以根据模板添加数据周围的静态值......