awk结合for和while循环算法

时间:2013-06-05 12:28:05

标签: linux awk

我有几百个文本文件,我想用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和while循环。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

Awk伪代码:

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

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