【问题标题】:Compare consecutive columns of a file and determine if any is greater than 80比较文件的连续列并确定是否有大于 80
【发布时间】:2015-11-23 18:07:56
【问题描述】:

我有一个包含如下 SQL 查询输出的文件:

DG_DATA 9 DG_FRA 0 OCR002 3 OCR 3

我使用以下方法提取带有数字的列

awk '{for(x=1;x<=NF;++x)if(x % 2 == 0)printf $x "\t"}'

我得到了这种格式的输出:

9   0   3   3   

但我需要一些帮助来比较所有整数并在任何整数大于 80 时打印“CRITICAL”。

【问题讨论】:

  • 请注意,在该术语的正常含义下,显示的数字都不是整数。另外,为什么不简单地跨过您感兴趣的领域呢? for (x = 2; x &lt;= NF; x += 2) printf $x "\t"?并且不要忘记在末尾添加一个换行符:print ""
  • 您对产生输出的 SQL 有任何控制权吗?

标签: bash shell awk


【解决方案1】:

这是一种方法:

{
    n=split($0, arr, " ");
    i=2;
    while(i<=n){
        str=str arr[i]"\t";
        if(arr[i] > 80){
            f=1
        };
        i+=2;
    }
    print str;
    if(f){
        print "CRITICAL";
    }
}

示例

所有值都可以:

[llamazing@pc ~]$ echo "DG_DATA 9 DG_FRA 0 OCR002 3 OCR 3"  |  awk '{n=split($0, a, " ");i=2;while(i<=n){str=str a[i]"\t";if(a[i] > 80){f=1};i+=2;}print str;if(f){print "CRITICAL";}}'
9       0       3       3

带有关键信息:

[llamazing@pc ~]$ echo "DG_DATA 9 DG_FRA 81 OCR002 3 OCR 3"  |  awk '{n=split($0, a, " ");i=2;while(i<=n){str=str a[i]"\t";if(a[i] > 80){f=1};i+=2;}print str;if(f){print "CRITICAL";}}'
9       81      3       3
CRITICAL

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-09
    • 2020-11-21
    • 2016-12-07
    • 1970-01-01
    • 1970-01-01
    • 2011-12-02
    • 1970-01-01
    相关资源
    最近更新 更多