【发布时间】:2021-07-25 14:52:06
【问题描述】:
我的问题更多的是优化问题,而不是“操作方法”。
我有一个 lef 文件,有数千行,格式如下:
RECT 429.336 273.821 426.246 274.721 ;
我想使用单线将某个点以上的所有矩形向左移动 4 um:
perl -lane '$F[2] > 1200 ? print $F[0]," ", ($F[1] - 4)," ", $F[2]," ", ($F[3] -4)," ", $F[4], " ;" : print $_' trial.lef
问题是,这是丑陋的。
有没有更好的方法来编辑文件?
我不挑剔,很乐意用其他语言(awk、sed 等)获得答案,只要它们比我写的更好。
附加输入:
LAYER M12 ;
RECT 0 411.214 1 412.214 ; <-- shouldn't change, because 411.214 < 1200
END
END kuku_pin
PIN gaga_pin
DIRECTION OUTPUT ;
USE SIGNAL ;
PORT
LAYER M11 ;
RECT 43.1045 1203.138 43.1805 1207.29 ; <-- should change to "RECT 39.1045 1203.138 39.1805 1207.29"
END
【问题讨论】:
-
“丑陋”是高度主观的。你喜欢
perl -lane 'map $_ -= 4, @F[1,3] if $F[2] > 1200; print "@F"' trial.lef吗? -
当然。我不知道地图功能,你只是介绍给我!这比我写的更好(据我所知)
-
其实我的代码在滥用
map。它利用$_是列表值的别名并且可以(ab)用来修改它的特性。所以我会说代码很短但晦涩难懂。它可能适用于单行代码,但永远不适用于生产代码。