awk 在算法中结合 for 和 while 循环
Posted
技术标签:
【中文标题】awk 在算法中结合 for 和 while 循环【英文标题】:Awk combine for and while loop in algorithm 【发布时间】: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 'BEGINflag=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 循环。
有什么想法吗?
【问题讨论】:
【参考方案1】:Awk 伪代码:
for(i=NF; i>=1; i--)
if($i>0.85*$1)
break;
else
print $i;
break
语句明确用于从循环中转义。
【讨论】:
以上是关于awk 在算法中结合 for 和 while 循环的主要内容,如果未能解决你的问题,请参考以下文章
精通awk系列(19):awk流程控制之breakcontinuenextnextfileexit语句
Shell编程Shell中for循环while循环until循环语句