unix - 获取每一行的最高绝对值(awk)
问题描述
我有一个文件,其中包含多个行和列选项卡分隔,例如:
ID v1 v2 v3 v4 v5 v6
A10 -0.2134 -0.190 -0.114 0.400 10.678 -0.123
A115 -0.5038 -0.559 -0.664 0.431 0.139 -0.860
AAAS -0.9072 -0.990 -1.251 3.153 -0.756 0.674
我想从每一行中获取最大的绝对数并打印是负数还是正数,并从对应的列中打印标题 ID,例如:
A10 10.678 v5
A115 -0.860 v6
AAAS 3.153 v4
我能够计算每一行的最小值和最大值,但我不确定如何获得最高的绝对值和 ID:
awk 'NR>1{a=0; b=0; for (i=1;i<=NF;i++) if ($i < a || i == 1)a = $i; else if($i > b|| i == 1)b = $i; print $1,a, b}' file
A10 -0.2134 10.678
A115 -0.860 0.431
AAAS -1.251 3.153
解决方案
差不多一样
$ awk 'function abs(x) {return x>0?x:-x}
NR==1 {split($0,h); next}
{max=abs($2); mi=2;
for(i=3;i<=NF;i++)
if(max<(nm=abs($i)))
{max=nm; mi=i};
print $1,$mi,h[mi]}' file | column -t
A10 10.678 v5
A115 -0.860 v6
AAAS 3.153 v4
推荐阅读
- reactjs - 反应路由器 dom:
不适用于无效的嵌套路径,例如 localhost:9090/{invalidaa}/{invalidb}/{invalidc} - ruby-on-rails - 在 Rails 中广播消息时未调用 ActionCable 频道
- r - RStudio - RMarkdown - Knit to PDF 将创建一个显示使用的代码但不显示代码结果的 pdf
- c# - 如何获取 Xamarin Forms 中 ObservableCollection 的第一个元素的数据?
- javascript - 如何在 Google Apps 脚本中拆分字符串以避免“JOIN 的文本结果超过 50000 个字符的限制”?
- javascript - 我可以找到 html 网页中的特定 div id 是否存在初始化变量吗?
- python - 在数据集中进行分割
- r - 变异一列并根据 matchin gof 两列从另一列填充其值
- vue.js - 存储状态更改时数据不更改
- java - 在 Java 中使用 MongoDB 驱动程序 POJO