我有几百个文本文件,我想用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循环。
有什么想法吗?
答案 0 :(得分:2)
Awk伪代码:
for(i=NF; i>=1; i--)
{
if($i>0.85*$1)
break;
else
print $i;
}
break
语句明确用于从循环中转义。