获取第一次出现值的行号?

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 = 3Mean <= 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