迭代字段并仅打印匹配正则表达式的字段

voi*_*nyx 0 regex awk field

我无法让这个工作:

awk  -F ";" '{for(i=1; i < NF;i++) $i ~ /^_.*/ {print $i}}'
Run Code Online (Sandbox Code Playgroud)

我想迭代所有字段(记录可以有7-9)并且只打印那些以_上面的行开头的那些在print语句中给出了语法错误,如果我省略了{print $i}我没有得到任何输出.

这样做的正确方法是怎样的?

Tom*_*ech 6

你错过了一个if:

awk  -F ";" '{for(i=1; i < NF;i++) if($i ~ /^_.*/) {print $i}}'
Run Code Online (Sandbox Code Playgroud)

awk程序的结构是condition { action }你当前拥有的所有内容都在一个动作块中(默认条件为true).在动作块内,if它不是隐含的.

顺便说一句,.*模式中的多余; 你也可以/^_/用来匹配任何以字母开头的字符串_.