awk:如何使用空格进行模式匹配

awk:如何使用空格进行模式匹配,awk,Awk,我是awk的新手,我的目的是对文件中的以下内容执行模式匹配。 模式应获得具有vdd*或vss*的任何行 我尝试在awk中跟踪模式vdd,,但没有成功 if(($1~"inout/svdd") || ($1~"input/svdd") || ($1~"output/svdd")) { do_something } 样本输入: input tprImeasbuf; output ibias7; inout vssd; output vddpminvref; input disa

我是awk的新手,我的目的是对文件中的以下内容执行模式匹配。 模式应获得具有vdd*或vss*的任何行 我尝试在awk中跟踪模式vdd,,但没有成功

if(($1~"inout/svdd") || ($1~"input/svdd") || ($1~"output/svdd")) {
do_something
}
样本输入:

  input tprImeasbuf;
  output ibias7;
  inout vssd;
  output vddpminvref;
  input disablevdda1v8;
  output ibiaspowerreferencescp5;
  output vddaok;
  input tprImeasPLL;
  inout mtp_isense;
  output ibiaspowerreferencescp3;
  output enablelevelshifts;
  output poff;
  inout vddp;
  input ResGainSel412;
  output icasc_ch5;
  inout Rref;
  output icasc_ch3;
  output ibiasshutdowncomparator;
  output vdddok;
  input tpr_vbgbufout;
  output iref3v3_ch4;
  inout atb5;
  input tprIrefcurbuf;
  output ibiaspowerreference4;
  input tpr_vdddcompextref;
  input tprIrefcurPLL;
预期产出:

vssd
vddpminvref
vddaok
vddp
vdddok

这就是你所期待的吗

$ awk -F" " ' $0~/vdd|vss/ { print } ' in_file
  inout vssd;
  output vddpminvref;
  input disablevdda1v8;
  output vddaok;
  inout vddp;
  output vdddok;
  input tpr_vdddcompextref;

$
EDIT1:

$ awk -F" " ' $1~/input|inout|output/ && $2~/^(vdd|vss)/ { print } ' in_file
  inout vssd;
  output vddpminvref;
  output vddaok;
  inout vddp;
  output vdddok;

这就是你所期待的吗

$ awk -F" " ' $0~/vdd|vss/ { print } ' in_file
  inout vssd;
  output vddpminvref;
  input disablevdda1v8;
  output vddaok;
  inout vddp;
  output vdddok;
  input tpr_vdddcompextref;

$
EDIT1:

$ awk -F" " ' $1~/input|inout|output/ && $2~/^(vdd|vss)/ { print } ' in_file
  inout vssd;
  output vddpminvref;
  output vddaok;
  inout vddp;
  output vdddok;

您可能想使用
grep
进行这种简单的模式匹配:

grep -o -E ' v(dd|ss)[^ ;]*' file
-o
用于打印匹配的正则表达式(而不是整行)


-E
启用扩展正则表达式(ERE)。

您可能想使用
grep
进行这种简单的模式匹配:

grep -o -E ' v(dd|ss)[^ ;]*' file
-o
用于打印匹配的正则表达式(而不是整行)

-E
启用扩展正则表达式(ERE)

\r
用于处理您发布的示例输入使用了
\r\n
换行符这一事实。如果您的实际输入不是这样,那么只需删除
\r
。我强烈建议在您的文件上运行
dos2unix
,以便在运行awk或任何其他UNIX工具之前剥离这些
\r



\r
用于处理您发布的示例输入使用了
\r\n
换行符这一事实。如果您的实际输入不是这样,那么只需删除
\r
。我强烈建议在您的文件上运行
dos2unix
,以便在运行awk或任何其他UNIX工具之前剥离这些
\r

您的预期输出是什么?vdd的预期输出:vddpminvref vddok vddp vdddok仅在输入、输出或输入输出后命名,并且应该仅以vdd或vssSee my update开始@Danish此静默可能与OP有关,两者都应重写以表示预期输出。啊,抱歉,我没有引用,您的预期输出是什么?vdd的预期输出:vddpminvref vddok vddp vdddok仅在输入、输出或输入输出后命名,并且应仅以vdd或vssSee my update开始@Danish此停顿可能与OP有关,两者都应重写以表示预期的输出。啊,抱歉,我没有引用,不,我只想在输入、输入或输出后输入名称,还有一个名称,该名称应仅以vdd或vss开头。请在回答中检查my EDIT1谢谢,该名称也可以在awk脚本中使用?如果问题中的文本是示例输入,那么为输入中的每个可能值测试$1有什么意义?是的,问题中提到的文本是示例输入。需要执行测试,以仅获取那些字符串以vdd或vss开头的行,基于此,我正在创建一个输出文件。如果输入文件中的行包含以vdd或vss开头的字符串,请在输出文件中添加一行pg_pin语法,对于其余不匹配的行,请仅添加pin语法。否,我只需要输入、输入或输出后的名称,还有一个名称,该名称应仅以vdd或vss开头。请在回答中检查my EDIT1谢谢,该名称也可以在awk脚本中使用?如果问题中的文本是示例输入,那么为输入中的每个可能值测试$1有什么意义?是的,问题中提到的文本是示例输入。需要执行测试,以仅获取那些字符串以vdd或vss开头的行,基于此,我正在创建一个输出文件。如果输入文件中的行包含以vdd或vss开头的字符串,请使用pg_pin语法在输出文件中添加一行,对于不匹配add only pin语法的其余行,您可能希望尝试在发布的示例输入上运行该行,因为它不会产生预期的输出。我不知道如何使用grep来完成这项任务,除非您仅使用GNU和高度实验性的
-P
选项,并使用一些复杂的向前看/向后看/左右看/任何regexp。哦,等等-单词边界可能会拯救它。当然,它仍然会匹配行的任何部分,而不仅仅是第二个字段,但如果所有OPs输入看起来都像示例一样,那么这可能就没问题了。@EdMorton描述(该模式应该得到任何具有vdd*或vss*的行)而且预期的结果相当混乱……您可能希望尝试在发布的示例输入上运行它,因为它不会产生预期的输出。我不知道如何使用grep来完成这项任务,除非您仅使用GNU和高度实验性的
-P
选项,并使用一些复杂的向前看/向后看/左右看/任何regexp。哦,等等-单词边界可能会拯救它。当然,它仍然匹配于行的任何部分,而不是第2个字段,但是如果所有OPs输入看起来都像示例,那么可能就可以了。@EdMorton描述(模式应该得到任何具有vdd*或vss*)的行,预期相当混乱。。。