awk: как сделать сопоставление с пробелом - PullRequest
0 голосов
/ 10 октября 2018

Я довольно новичок в 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

Ответы [ 3 ]

0 голосов
/ 10 октября 2018

Возможно, вы захотите использовать grep для такого простого сопоставления с образцом:

grep -o -E ' v(dd|ss)[^ ;]*' file

-o для печати соответствующего регулярного выражения (а не всей строки).

-E включает расширенное регулярное выражение (ERE).

0 голосов
/ 10 октября 2018
$ awk '$2~/^v(ss|dd)/{sub(/;\r$/,"",$2); print $2}' file
vssd
vddpminvref
vddaok
vddp
vdddok

\r предназначен для обработки того факта, что введенный вами образец ввода использует \r\n переводы строки.Если это не так в вашем реальном вводе, просто удалите \r.Я настоятельно рекомендую запустить dos2unix в вашем файле, чтобы удалить эти \r s перед запуском awk или любого другого инструмента UNIX.

0 голосов
/ 10 октября 2018

Это то, что вы ожидаете.

$ 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...