获取第一次出现值的行号?
Get line number where first occurrence of a value appears?
我有一个如下所示的 CSV 文件:
E Run 1 Run 2 Run 3 Run 4 Run 5 Run 6 Mean
1 0.7019 0.6734 0.6599 0.6511 0.701 0.6977 0.680833333
2 0.6421 0.6478 0.6095 0.608 0.6525 0.6285 0.6314
3 0.6039 0.6096 0.563 0.5539 0.6218 0.5716 0.5873
4 0.5564 0.5545 0.5138 0.4962 0.5781 0.5154 0.535733333
5 0.5056 0.4972 0.4704 0.4488 0.5245 0.4694 0.485983333
我正在尝试查找最后一列的值低于特定范围的行号。例如下面 0.6
.
使用上面的 CSV 文件,我想 return 3
因为 E = 3
是 Mean <= 0.60
的第一行。如果0.6
下面没有值我要return0
。我实际上 return 根据最后一列计算第一列中的值。
我打算在gnuplot
中将这个数字初始化为常量。如何才能做到这一点?我标记了 awk
因为我认为它是相关的。
像这样应该可以解决问题:
awk 'NR>1 && <.6 {print ;fnd=1;exit}END{if(!fnd){print 0}}' yourfile
另一个awk。您可以在 BEGIN
中将默认 return 值初始化为 var ret
,但由于它是 0,因此实际上没有任何意义,因为空 var+0
会产生相同的效果。如果在达到END
之前没有达到阈值0.6,即returned。如果满足,exit
调用 END
并输出 ret
:
$ awk '
NR>1 && $NF<0.6 { # final column has a value below a certain range
ret= # I want to return 3 because E = 3
exit
}
END {
print ret+0
}' file
输出:
3
如果你想要一个 gnuplot-only 版本...如果你使用一个文件删除数据块并用你在“”中的文件名替换$Data
。
reset session
$Data <<EOD
E Run 1 Run 2 Run 3 Run 4 Run 5 Run 6 Mean
1 0.7019 0.6734 0.6599 0.6511 0.701 0.6977 0.680833333
2 0.6421 0.6478 0.6095 0.608 0.6525 0.6285 0.6314
3 0.6039 0.6096 0.563 0.5539 0.6218 0.5716 0.5873
4 0.5564 0.5545 0.5138 0.4962 0.5781 0.5154 0.535733333
5 0.5056 0.4972 0.4704 0.4488 0.5245 0.4694 0.485983333
EOD
set table $Dummy
plot E=flag=0 $Data u (<=0.6 && flag==0 ? (E=, flag=1) : 0) w table
unset table
print E
结果:
3.0
我有一个如下所示的 CSV 文件:
E Run 1 Run 2 Run 3 Run 4 Run 5 Run 6 Mean
1 0.7019 0.6734 0.6599 0.6511 0.701 0.6977 0.680833333
2 0.6421 0.6478 0.6095 0.608 0.6525 0.6285 0.6314
3 0.6039 0.6096 0.563 0.5539 0.6218 0.5716 0.5873
4 0.5564 0.5545 0.5138 0.4962 0.5781 0.5154 0.535733333
5 0.5056 0.4972 0.4704 0.4488 0.5245 0.4694 0.485983333
我正在尝试查找最后一列的值低于特定范围的行号。例如下面 0.6
.
使用上面的 CSV 文件,我想 return 3
因为 E = 3
是 Mean <= 0.60
的第一行。如果0.6
下面没有值我要return0
。我实际上 return 根据最后一列计算第一列中的值。
我打算在gnuplot
中将这个数字初始化为常量。如何才能做到这一点?我标记了 awk
因为我认为它是相关的。
像这样应该可以解决问题:
awk 'NR>1 && <.6 {print ;fnd=1;exit}END{if(!fnd){print 0}}' yourfile
另一个awk。您可以在 BEGIN
中将默认 return 值初始化为 var ret
,但由于它是 0,因此实际上没有任何意义,因为空 var+0
会产生相同的效果。如果在达到END
之前没有达到阈值0.6,即returned。如果满足,exit
调用 END
并输出 ret
:
$ awk '
NR>1 && $NF<0.6 { # final column has a value below a certain range
ret= # I want to return 3 because E = 3
exit
}
END {
print ret+0
}' file
输出:
3
如果你想要一个 gnuplot-only 版本...如果你使用一个文件删除数据块并用你在“”中的文件名替换$Data
。
reset session
$Data <<EOD
E Run 1 Run 2 Run 3 Run 4 Run 5 Run 6 Mean
1 0.7019 0.6734 0.6599 0.6511 0.701 0.6977 0.680833333
2 0.6421 0.6478 0.6095 0.608 0.6525 0.6285 0.6314
3 0.6039 0.6096 0.563 0.5539 0.6218 0.5716 0.5873
4 0.5564 0.5545 0.5138 0.4962 0.5781 0.5154 0.535733333
5 0.5056 0.4972 0.4704 0.4488 0.5245 0.4694 0.485983333
EOD
set table $Dummy
plot E=flag=0 $Data u (<=0.6 && flag==0 ? (E=, flag=1) : 0) w table
unset table
print E
结果:
3.0