我有以下格式的文件
addInst -inst RESET_n_RS -cell PRWD_V ; placeInstance RESET_n_RS 4653.84 10212 R180
addInst -inst MODE_RS -cell PRWD_V ; placeInstance MODE_RS 4686.864 10212 R180
addInst -inst VDD_PD_T_4 -cell PVDD1_V ; placeInstance VDD_PD_T_4 4719.888 10212 R180
addInst -inst VDD_IO_PD_T_5 -cell PVDD2_V ; placeInstance VDD_IO_PD_T_5 4785.888 10212 R180
placeInstance DBG_RS 4861.728 10212 R180
placeInstance HAST_RS 4894.752 10212 R180
addInst -inst VDD_PD_T_8 -cell PVDD1_V ; placeInstance VDD_PD_T_8 4927.776 10212 R180
placeInstance WIRE_RS 4993.776 10212 R180
addInst -inst EN0_RS -cell PRWD_V ; placeInstance EN0_RS 5026.8 10212 R180
如果行有PRWD_V
模式,我想打印$2
为该行,如果模式没有在该行中找到不做任何事情打印该行,因为它是.输出如下:
placeInstance RESET_n_RS 4653.84 10212 R180
placeInstance MODE_RS 4686.864 10212 R180
addInst -inst VDD_PD_T_4 -cell PVDD1_V ; placeInstance VDD_PD_T_4 4719.888 10212 R180
addInst -inst VDD_IO_PD_T_5 -cell PVDD2_V ; placeInstance VDD_IO_PD_T_5 4785.888 10212 R180
placeInstance DBG_RS 4861.728 10212 R180
placeInstance HAST_RS 4894.752 10212 R180
addInst -inst VDD_PD_T_8 -cell PVDD1_V ; placeInstance VDD_PD_T_8 4927.776 10212 R180
placeInstance WIRE_RS 4993.776 10212 R180
placeInstance EN0_RS 5026.8 10212 R180
我试过用awk
awk -F';' '{for (i=1;i<=NF;i++) if ($i ~ /PRWD_V/) print $2} {print $1,$2}' file1
这仅适用于某些行,输出不正常。
3条答案
按热度按时间0lvr5msh1#
bqujaahr2#
假设
PRWD_V
总是出现在行的第一部分,就像示例输入中的情况一样,则解决方案可以简单地为:说明:
PRWD_V
时,/.* PRWD_V .*; */
才匹配该行的第一部分(包括分号和周围的空格)。sub(/.../,"")
从行中删除匹配部分(* 当且仅当 * 存在匹配时)。1
打印行的剩余部分。输出:
使用
sed
甚至grep
也可以实现相同的效果:一个二个一个一个
nr7wwzry3#
使用
sed