遍历字段并仅打印那些匹配正则表达式的字段

Iterate over fields and print only those matching regex

我无法正常工作:

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

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

正确的做法是什么?

您缺少 if:

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

awk 程序的结构是 condition { action },但您当前拥有的全部都在一个操作块中(条件默认为 true)。在操作块中,if 不是隐含的。

顺便说一句,模式中的 .* 是多余的;您也可以使用 /^_/ 来匹配任何以 _.

开头的字符串