Awk 一次删除文件列表中的选定项目后,每隔一个项目删除一次

Awk 一次删除文件列表中的选定项目后,每隔一个项目删除一次,awk,sed,grep,Awk,Sed,Grep,我有一个包含许多其他不需要的项目的文件,我想自动删除它们,留下所需的数据 我有大约100个单元,我只需要单元名称和所有的针和方向为这100个单元,并删除每一个其他项目41437行在库文件 grep -A 41435 'cell' lib | grep -iE '(cell|pin|direction)' 输出 cell( FVOXY_O_W11X ) {

我有一个包含许多其他不需要的项目的文件,我想自动删除它们,留下所需的数据

我有大约100个单元,我只需要单元名称和所有的针和方向为这100个单元,并删除每一个其他项目41437行在库文件

grep -A 41435 'cell' lib | grep -iE '(cell|pin|direction)'
输出

cell( FVOXY_O_W11X ) {                                                                                                                                   
        pa_p ( vcc ) {                                                                                                                                        
          direction : input;                                                                                                                                    
        pb_p ( vss ) {                                                                                                                                        
          direction : input;                                                                                                                                    
  is_macro_cell : true;                                                                                                                                         
pin(measure) {                                                                                                                                          
        related_p_pin : x ;                                                                                                                               
        related_g_pin : y ;                                                                                                                              
        direction : inout ;                                                                                                                                     
        original :measure;                                                                                                                         
} /* end of pin measure */                                                                                                                              
pin(pass) {                                                                                                                                                   
        related_p_pin : x ;                                                                                                                               
        related_g_pin :y ;                                                                                                                              
        direction : input ;                                                                                                                                     
        original : pass;                                                                                                                                  
} /* end of pin pass */
我需要什么

cell( FOVIO_NOM_D2DSYNC8X )

pin(measure)
 direction : inout 

pin(pass)
direction : input
像这样,我有大约100个细胞,我只想要细胞的名称和所有的pin和方向的细胞,任何人都可以告诉我如何才能拯救

$ awk '/^cell/; /^pin/{print; p=1} p && /direction/{print; p=0}' file
我会给你台词

cell( FVOXY_O_W11X ) {                                                                                                                                   
pin(measure) {                                                                                                                                          
        direction : inout ;                                                                                                                                     
pin(pass) {                                                                                                                                                   
        direction : input ; 
您可以在打印之前进行一些过滤,以去除不需要的字符

解释

/^细胞/;打印以单元格开头的行

/^pin/{print;p=1}打印以pin开头的行并设置变量p,这样我们就知道我们在pin上下文中

p&&/direction/{print;p=0}如果在管脚上下文中,则打印具有方向的行,并重置p以从当前管脚上下文中退出


使用“^cell | ^pin | direction”几乎可以提供正确答案。也许已经足够好了?为什么输出中的单元格下缺少方向?输出中的单元格[cell FVOXY_O_W11X]的方向也是错误的是什么意思?如果您想帮助编写一个工具来解析文件,您需要向我们展示该文件,而不仅仅是试图解析文件和所需输出时得到的输出。您的问题需要包含将生成您发布的输出的示例输入。还要更好地解释您的需求。现在还不清楚什么样的输入文件可以产生你所说的在你运行的命令下得到的输出,也不清楚为什么你所说的预期输出会是在你描述了你试图做的事情后得到的预期输出。你能告诉我这个P的用途吗?你说的P=1和P=0是什么意思