【问题标题】:Awk combine for and while loop in algorithmawk 在算法中结合 for 和 while 循环
【发布时间】:2013-06-01 03:43:09
【问题描述】:

我有数百个文本文件,我想使用 awk 进行编辑。一个例子是

5483.39  5134.64  4602.88  3953.89  3271.87  2495.87  1788.98  1285.57  1034.09  1196.25  1851.03  2874.14  3797.68  4361.26  4717.09  4829.74  4760.26  4758.12  4790.80  4763.77  4734.56  3311.89 -811.57 -6152.48

我想使用以下算法进行编辑。从最后一个值开始(在这种情况下为-6152.48),我想检查计数是否小于字段 1 中计数的 85%。如果是这样,则将此字段值重置为 $1。然后我会重复 $(NF-1) 等。但是,当我第一次遇到不满足这个 85% 条件的字段值时(即 $i > 0.85*$1),我想退出循环并保留所有其他领域。

为此,我认为我需要一个 foreach 循环来扫描每个字段值,并需要一个 while 循环来检查条件。这是我到目前为止所拥有的

awk 'BEGIN{flag=0} {for(i=1;i<=NF;i++) a[i] = $i/$1} {for(i=NF;i>=1;i--) print a[i],flag}' file

我不确定如何使用 awk 实现所需的逻辑。即对于某些条件 if ($i > 0.85 * $1) flag = 1;然后转义上面的 for 循环。

我可能不需要 for 和 while 循环。

有什么想法吗?

【问题讨论】:

    标签: linux awk


    【解决方案1】:

    Awk 伪代码:

    for(i=NF; i>=1; i--)
    {
       if($i>0.85*$1)
          break;
       else
          print $i;
    }
    

    break 语句明确用于从循环中转义。

    【讨论】:

      猜你喜欢
      • 2014-01-09
      • 2012-12-03
      • 1970-01-01
      • 2020-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-17
      • 1970-01-01
      相关资源
      最近更新 更多