我有一个lib文件,我想grep特定的单元格,该单元格的引脚和方向,而忽略了另一个单元格的其他不需要的数据以及相应的引脚和方向。我有大约10个细胞
lib文件
macro cell A
class
origin
size
pin:sdf
direction:input
layer
port
end
macro cell B
class
origin
size
pin:vcc
direction:output
layer
port
end
macro cell C
class
origin
size
pin:vee
direction:inout
layer
port
end
输出我想要的东西
macro cell A
pin:sdf
direction:input
我该怎么做
答案 0 :(得分:2)
您可以使用以下awk
命令:
macroToSelect="macro cell A";
awk -v var="$macroToSelect" '{if($0 == var){f=1;print}}/^pin:/{if(f)print}/^direction:/{if(f){print; exit}}' libfile
输入的输出:
macro cell A
pin:sdf
direction:input
<强>解释强>
-v var="$macroToSelect"
您将变量值传递给awk以选择特定的宏单元格{if($0 == var){f=1;print}}
当live等于您传递的变量时,您将f
值更改为1
,默认情况下为0
并打印该行/^pin:/{if(f)print}
当您遇到以:pin
开头的行时,如果f为1则打印该行/^direction:/{if(f){print; exit}
你为direction:
做同样的事情,但这次你停止执行命令<强>试验:强>
如果您只想使用引脚和方向打印所有记录,那么您可以使用:
awk '/^(pin:|direction:|macro cell)/{print}' libfile
答案 1 :(得分:1)
您还可以使用egrep
根据&#34;宏单元&#34;分隔所需的块,然后再次egrep
来删除不需要的字段:
egrep -A 5 'macro cell' input_file | egrep -iv 'origin|class|size'
您还可以将第二部分更改为仅包含所需字段:
egrep -A 5 'macro cell' input_file | egrep -i 'macro|pin|direction'
模式后-A 5
打印5行。这是在假设只有一个宏小区A&#34;在文件中,块总是具有相同的结构。不漂亮,但它适用于这种特殊情况。