Awk 如何在bash中grep特定模式和该模式下的特定内容,排除该文件中的所有其他内容

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

我有一个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
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
  • -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:
    执行相同的操作,但这次您停止了命令的执行
测试:

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
,它工作了。