Awk 如何在bash中grep特定模式和该模式下的特定内容,排除该文件中的所有其他内容
我有一个lib文件,我想grep一个特定的单元格,该单元格的pin和方向,省去另一个单元格的其他不需要的数据,还有相应的pin和方向。我有大约10个牢房 lib文件Awk 如何在bash中grep特定模式和该模式下的特定内容,排除该文件中的所有其他内容,awk,sed,grep,Awk,Sed,Grep,我有一个lib文件,我想grep一个特定的单元格,该单元格的pin和方向,省去另一个单元格的其他不需要的数据,还有相应的pin和方向。我有大约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 origi
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
如何执行此操作您可以使用以下
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
解释:
macro cell A
pin:sdf
direction:input
将变量值传递给awk以选择特定的宏单元-v var=“$macroToSelect”
当live等于您传递的变量时,您将{if($0==var){f=1;print}}
值更改为f
默认值为1
,然后打印行0
每当遇到以/^pin://{if(f)print}
:pin开头的行时,如果f为1,则打印该行
您对/^direction://{if(f){print;exit}
执行相同的操作,但这次您停止了命令的执行direction:
macro cell A
pin:sdf
direction:input
如果要仅打印带有pin和方向的所有记录,则可以使用:
awk '/^(pin:|direction:|macro cell)/{print}' libfile
您还可以使用
egrep
根据“宏单元”分离所需的块,然后再次使用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'
您还可以将第二部分更改为仅包含所需字段:
egrep -A 5 'macro cell' input_file | egrep -iv 'origin|class|size'
egrep -A 5 'macro cell' input_file | egrep -i 'macro|pin|direction'
-a5
在模式后打印5行。这是在假设只有一个“宏单元A”的情况下工作的在文件中,块始终具有相同的结构。不漂亮,但在这种特定情况下有效。让我知道我的答案是否解决了您的问题!谢谢您的解决方案,先生,但您能否告诉我,如果我希望所有10个单元以与单元名称、pin、方向相同的模式输出,那么我该如何做,先生,还有其他简单的方法吗然后你只需将“宏单元A”
移到“宏单元”
中,并在打印后移除退出,它就会工作!让我知道它是否解决了你的问题,或者你应该用f=0
awk'/^(pin:|方向:|宏单元)/{print}'libfile=awk'/^(pin direction |宏)替换退出/{print}'lef,但它只是给了我单元名no pin和direction list(小更正它只是pin no:它与direction也一样)grep-iE'^(macro | pin | direction)'lef此命令与awk comand相同,但其输出是此宏单元,宏单元B,宏单元c它只给我单元名称,但我还需要单元名称的pin和方向,但我在一个文件中有大约2000行,大约25个单元有各自的pin和方向,我想要所有25个单元有各自的pin和方向ion那么我该怎么做这个方法你发布的内容不可行先生,你能给我一个更好的建议吗对不起,我误解了这个问题。如果你稍微调整一下我的答案,它应该适用于整个文件。我编辑了我的答案。让我知道它是否有效。嗨,我找不到你编辑过的答案。你能再发送一次吗<“宏单元”中的代码>A
,它工作了。