【问题标题】:Iterate over fields and print only those matching regex遍历字段并仅打印匹配的正则表达式
【发布时间】:2016-04-27 18:05:39
【问题描述】:

我无法让它工作:

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

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

这样做的正确方法是什么?

【问题讨论】:

    标签: regex awk field


    【解决方案1】:

    您缺少if

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

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

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

    【讨论】:

    • 对,/^_.*/ 中的 .* 什么也不做,因为它意味着任何字符出现零次或多次,因此单独的 /^_/ 将适用于与 @ 完全相同的字段987654331@.
    猜你喜欢
    • 2012-03-24
    • 1970-01-01
    • 2015-02-24
    • 2020-06-17
    • 2022-11-16
    • 1970-01-01
    • 1970-01-01
    • 2011-04-06
    相关资源
    最近更新 更多