【发布时间】:2016-04-27 18:05:39
【问题描述】:
我无法让它工作:
awk -F ";" '{for(i=1; i < NF;i++) $i ~ /^_.*/ {print $i}}'
我想遍历所有字段(记录可以有 7-9 个)并只打印那些以 _ 开头的字段,除了上面的行在打印语句中给我一个语法错误,如果我省略了 @987654323 @我没有得到任何输出。
这样做的正确方法是什么?
【问题讨论】:
我无法让它工作:
awk -F ";" '{for(i=1; i < NF;i++) $i ~ /^_.*/ {print $i}}'
我想遍历所有字段(记录可以有 7-9 个)并只打印那些以 _ 开头的字段,除了上面的行在打印语句中给我一个语法错误,如果我省略了 @987654323 @我没有得到任何输出。
这样做的正确方法是什么?
【问题讨论】:
您缺少if:
awk -F ";" '{for(i=1; i < NF;i++) if($i ~ /^_.*/) {print $i}}'
awk 程序的结构是condition { action },但你目前拥有的都是在一个动作块中(条件默认为true)。在操作块中,if 不是隐含的。
顺便说一句,模式中的.* 是多余的;您也可以使用/^_/ 匹配任何以_ 开头的字符串。
【讨论】:
/^_.*/ 中的 .* 什么也不做,因为它意味着任何字符出现零次或多次,因此单独的 /^_/ 将适用于与 @ 完全相同的字段987654331@.