【发布时间】:2013-12-05 10:19:21
【问题描述】:
我有一个文件,其行如下所示:
IBACS6XX P24 ( .PADM(TEST_3), .QC(P1_87P_Z_3) );
OBAXXCSXX08 P77 ( .A(P1_158P_N1_PROBE_SEL), .PADM(N1_SELECT) );
inv0_p U99 ( .A(P1_P1_2P_P1_P1_19P_Z_0), .Q(n00) );
IBACS6XX P25 ( .PADM(TBUSREQN), .QC(tbusreqn) );
IBACS6XX P26 ( .PADM(NX_N2N), .QC(P1_177P_Z_0) );
OBAXXCSXX08 P27 ( .A(P1_158P_N2G6PC), .PADM(N2G6PCC) );
OBAXXCSXX08 P28 ( .A(P1_158P_N1G6PC), .PADM(N1G6PCC) );
IOACS3P6CSXE04 P46 ( .A(P1_158P_DOUT_7), .EN(FE_OFN21_P1_158P_DATA_OUTN),
.PADM(DATA_7), .MA(LTIEHI_5_NET), .MB(P1_87P_Z_0_INV), .QC(P1_49P_ZI_7) );
IOACS3P6CSXE04 P47 ( .A(P1_158P_DOUT_6), .EN(FE_OFN21_P1_158P_DATA_OUTN),
.PADM(DATA_6), .MA(LTIEHI_5_NET), .MB(P1_87P_Z_0_INV), .QC(P1_49P_ZI_6) );
现在问题来了,我希望提取 3 项数据并将它们放入一个以空格字符分隔的新文件中
(1) 第一项,例如第一行的IBACS3XX
(2) 第二项以 P 开头,后跟 2 位数字,通常为 3 个字符长。在第二项之后,我们总是得到一个左括号。例如第一行的 P24
(3) 和 .PADM( 和右括号 ) 之间的项目,例如第一行中的 TEST_3
如何在 Linux 中做到这一点?你有更好的方法吗?
问题是:
(1) 某些行被分成两行,因此 .PADM( 可能会出现在第二行而不是最后两个示例中。
(2) .PADM( 并不总是出现在行中的同一位置,如第二个示例所示。
(3) 所有行都不感兴趣,只有那些以 IBA OBA 或 IOA 开头的行,如上所示。如果一行不以这些字符开头,则可以忽略它。这是网表文件的一部分。
所有行都用';'“关闭”符号,否则它们继续到文本文件的下一行。
我假设 awk 和 sed 可以组合使用,但不确定如何使用。
编辑:
它工作得很好,现在一小步就是从网表中过滤掉这些:
ggppxbp P74 ( );
ggppxbp P74VDD ( );
ggppxbg P75 ( );
ggppxbg P75VSS ( );
我只想丢弃最后一个括号和分号。这些单元格总是以 ggppxb 开头,最后一个字母表示是 5v 还是 GND 连接,因此只有最后一个字母会改变。
我认为我可以将 ggppxbp 放入 || 之后的 if 语句中象征。但是,如何丢弃括号和分号,并将剩余两项包含到输出文件中?
【问题讨论】:
标签: linux sed awk pattern-matching text-extraction