【问题标题】:How to use AWK Using with IF Condition如何在 IF 条件下使用 AWK
【发布时间】:2014-09-22 15:42:09
【问题描述】:

我需要使用 AWK 命令来查找文件中分隔符的数量,如果数量超过预期,那么我需要捕获记录。

使用的代码:

awk 'BEGIN { FS= "^A"; if ( 31 < NF-1) print $0 }'  file.dat

但它不起作用。

【问题讨论】:

  • 这是因为您在 BEGIN 块内工作
  • 您的^A 分隔符是实际序列还是字符串?
  • 发布样本输入和预期输出。

标签: unix if-statement awk delimiter fs


【解决方案1】:

作为 fedorqui cmets,您在 BEGIN 块中没有任何数据。您必须至少阅读 1 条记录以确定您有多少字段:

awk -F"^A" 'NR==1 && NF >= 32 {exit} {print}'  file.dat

【讨论】:

    【解决方案2】:

    略短的版本:

    awk -F"^A" 'NF > 32'  file.dat
    

    您最初的构造是31 &lt; NF-1,这只是NF&gt;32 的一种更复杂的说法。

    【讨论】:

      【解决方案3】:

      假设"^A"是两个字符的字符串

      awk 'BEGIN { FS= "\\^A"} NF-1 > 32'  file.dat
      

      可以,因为{print} 是匹配的默认操作,两个最 awk(gawk 和 mawk)的常见实例都将 "\\^A" 翻译成文字 插入符号后跟字母A

      另一方面,如果"^A" 表示Control-A,您必须正确 在 shell 提示符下键入行时引用控制字符 (例如,在 bash+readline 中,它是 Control-V Control-A),你不能 使用反斜杠。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-15
        • 1970-01-01
        • 2016-03-08
        • 1970-01-01
        • 1970-01-01
        • 2015-03-19
        相关资源
        最近更新 更多