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
    $vv
    变量设置为90
  • -p
    逐行处理输入,处理后打印每一行
  • -a
    在空白处拆分每一行并填充@F数组

变量$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