首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >引用包含按列计算的值的行。

引用包含按列计算的值的行。
EN

Stack Overflow用户
提问于 2017-03-31 17:38:58
回答 1查看 31关注 0票数 0

对于选定的模式,我只希望打印具有最小值的列7、8和9平方之和的行(如下面的脚本所示,我以$ script.sh patterns.txt的形式运行该脚本)。我的脚本打印特定模式的最后一行,我只想打印包含最小值的行。我怎么能提到那句话呢?

下面是输入和期望输出。

代码语言:javascript
复制
while IFS='' read -r line || [[ -n "$line" ]]; do
grep -E -wr $line input.txt| awk '{ min=($7^2)+($8^2)+($9^2);} FNR==NR  {if (($7^2)+($8^2)+($9^2)<=min) min=($7^2)+($8^2)+($9^2);} END {print $0}' >> output.txt
done < "$1"

输入

代码语言:javascript
复制
-3.79 43 18.6279 16.5936 -1.33 CAN  1 10 100  
-3.79 43 18.6279 16.5937 -1.33 CAN  2 20 200  
10.51 -66 1.71937 -9.93556 1.20 CAS 5 50 500  
10.51 -66 1.71937 -9.93556 1.21 CAS 4 40 400  
10.51 -66 1.71937 -9.93555 1.20 CAS 6 60 600  
-9.41 38 17.751 16.7401 -0.25 CASC  12 20 400  
-9.41 38 17.751 16.7401 -0.53 CASC  13 50 500  
-9.41 38 17.751 16.7401 -0.25 CASC  12 20 400 

输出

代码语言:javascript
复制
-3.79 43 18.6279 16.5936 -1.33 CAN  1 10 100  
10.51 -66 1.71937 -9.93556 1.21 CAS 4 40 400  
-9.41 38 17.751 16.7401 -0.25 CASC  12 20 400
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-31 17:59:47

awk去营救!

代码语言:javascript
复制
awk                     '{v=$7^2 + $8^2 + $9^2} 
  !($6 in a) ||  v<a[$6] {a[$6]=v; line[$6]=$0} 
  END                    {for(k in line) print line[k]}' file


-3.79 43 18.6279 16.5936 -1.33 CAN  1 10 100
10.51 -66 1.71937 -9.93556 1.21 CAS 4 40 400
-9.41 38 17.751 16.7401 -0.25 CASC  12 20 400

为了找到设置初始值所需的最小值,我们在这里检查之前是否遇到过这个键。

这是我们设置/更改最小值的关键条件!($6 in a) || v<a[$6],如果它是键的第一次遇到的情况(即初始值来比较其余值),或者小于当前的最小值。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43146650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档