我想对awk
列中的选定值求和。第二列是时间。我想每秒添加4th
列中的值。
输入:
1 0.1 2 1 3
2 0.3 2 2 3
4 0.6 2 3 3
2 1.1 2 4 3
5 1.3 2 5 3
6 2.2 2 6 3
7 2.7 2 7 3
8 3.6 2 8 3
9 3.9 2 1 3
10 4.1 2 1 3
预期的输出(我们有5
秒):
6
9
13
9
1
编辑:
这是我的code
,但我不知道它如何动态运行。
awk '$2>x && $2<=y (sum+=$4) END {print sum}' filename
其中x
-开始时间,y
-结束时间。它仅适用于静态值,这意味着现在我只能在选定的一秒内获得结果。
答案 0 :(得分:2)
尝试以下awk
程序
BEGIN {
total = 0
secondEnd = 1
}
{
if($2 < secondEnd) {
total += $4
next
}
while($2 > secondEnd) {
print(total)
total = 0
secondEnd++
}
total = $4
}
END {
print(total)
}
答案 1 :(得分:1)
编辑: :根据OP的要求,添加了一个代码,该代码将接受作为awk
变量提供给它的任何字段。
awk -v col1="2" -F"[ .]" '$col1 == prev+1{print sum;sum=prev=""} {sum+=$NF;prev=$col1} END{if(prev && sum){print sum}}' Input_file
OR(此处为非衬线形式的解决方案)
awk -v col1="2" -F"[ .]" '
$col1 == prev+1{
print sum;
sum=prev=""
}
{
sum+=$NF;
prev=$col1
}
END{
if(prev && sum){
print sum}
}' Input_file
如果您要将bash变量传递给awk
变量,请执行以下操作。
column=2 ##Shell variable
awk -v col1="$column" -F"[ .]" '$col1 == prev+1{print sum;sum=prev=""} {sum+=$NF;prev=$col1} END{if(prev && sum){print sum}}' Input_file
请尝试以下操作,并告诉我是否有帮助(请考虑您实际的Input_file与此处显示的示例相同)。
awk -F"[ .]" '$2 == prev+1{print sum;sum=prev=""} {sum+=$NF;prev=$2} END{if(prev && sum){print sum}}' Input_file
现在也添加一种非衬套形式的解决方案。
awk -F"[ .]" '
$2 == prev+1{
print sum;
sum=prev=""
}
{
sum+=$NF;
prev=$2
}
END{
if(prev && sum){
print sum}
}' Input_file