Awk 求特定列值的和,直到达到某个值为止
我想打印第一列的值,直到它达到某个值,如Awk 求特定列值的和,直到达到某个值为止,awk,text-processing,Awk,Text Processing,我想打印第一列的值,直到它达到某个值,如 43 12.00 53888 29 10.00 36507 14 9.00 18365 8 8.00 10244 1 7.00 2079 1 9.50 1633 0 6.00 760 我希望输出为: val=90 43 12.00 53888 29 10.00 36507 14 9.00 18365 救命啊 perl -sape ' $s += $F[0] ; exit
43 12.00 53888
29 10.00 36507
14 9.00 18365
8 8.00 10244
1 7.00 2079
1 9.50 1633
0 6.00 760
我希望输出为:
val=90
43 12.00 53888
29 10.00 36507
14 9.00 18365
救命啊
perl -sape ' $s += $F[0] ; exit if $s > $vv' -- -vv=90 file
启用从命令行设置变量,-s
将-vv=90
变量设置为90$vv
逐行处理输入,处理后打印每一行-p
在空白处拆分每一行并填充@F数组-a
变量$s用于保存运行总和。只有当总和小于$vv时,才会打印该行。一旦总和过大,程序将退出。请尝试使用显示的样本编写和测试以下内容。当第一列的总和大于所述值时,显式地将
exit
设置为条件,以避免不必要地读取输入文件的其余部分
awk -v val="90" '($1+prev)>val{exit} ($1+prev)<=val{print}{prev+=$1}' Input_file
awk-v val=“90”($1+prev)>val{exit}($1+prev)val{exit}($1+prev)val{exit}($1+prev)val{##如果第一个字段和prev变量之和大于val,则执行以下操作。
退出##退出程序以节省一些时间。
}
($1+前期)考虑小型单线awk
awk -v val=85 '{ s += $1 ; if ( s <= val ) print }'
awk-v val=85'{s+=1;如果(s考虑更小的awk,这与
awk-v v=90'((v-=$1)43+29+14是86,但更新后的值为90。请您的问题解释您要求和哪些数字才能得到结果90
,并说明您到目前为止已经尝试了什么。抱歉,这不是StackOverflow的工作方式。“我想做X,请给我提示和/或示例代码”形式的问题请访问并阅读,特别是在这里阅读一个简短的awk,它为您提供了帮助:awk-v v=90'((s+=$1)>v{exit}1'文件
如果值为负值,则生成s
awk -v val="90" ' ##Starting awk program from here and mentioning variable val as 90 here.
($1+prev)>val{ ##Checking condition if first field and prev variable sum is greater than val then do following.
exit ##exit from program to save some time.
}
($1+prev)<=val; ##Checking condition if sum of $1 and prev is lesser than or equal to val then print the current line.
{
prev+=$1 ##keep adding 1st field to prev variable here.
}
' Input_file ##Mentioning Input_file name here.
awk -v val=85 '{ s += $1 ; if ( s <= val ) print }'
awk -v val=85 '{ s+= $1 } s <= val'
awk -v v=90 '((v-=$1)<0){exit}1' file
awk -v v=90 '0<=(v-=$1)' file