作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
给定这种类型的输入:
1,Name1,Type1,100,50
2,Name2,Type2,85,80
3,Name3,Type3,95,92
4,Name4,Type4,60,55
5,Name5,Type5,87,77
我想计算最后两个值的平均值,然后按降序对它们进行排序,所以我写了这段 bash 代码:
awk 'BEGIN{FS=","} {avg=($4+$5)/2;print $1,$3,avg}' | sort -k3 -nr
这给了我这个非常接近我预期输出的输出:
3 Type3 93.5
2 Type2 82.5
5 Type5 82
1 Type1 75
4 Type4 57.5
我想要的最后一件事是用 | 分隔输出(管道),所以我像这样使用变量 OFS:
awk 'BEGIN{FS=",";OFS="|"} {avg=($4+$5)/2;print $1,$3,avg}' | sort -k3 -nr
输出结果:
5|Type5|82
4|Type4|57.5
3|Type3|93.5
2|Type2|82.5
1|Type1|75
OFS 似乎打破了这种排序。这种行为是预期的吗?有什么解决方法吗?
最佳答案
您显示的代码尝试中存在 2 个问题。首先是 Input_file name 未在 awk
代码中传递(可能是拼写错误),第二是您需要使用 -t'|'< 在
选项,所以它会像:sort
中设置分隔符
awk 'BEGIN{FS=",";OFS="|"} {avg=($4+$5)/2;print $1,$3,avg}' Input_file | sort -t'|' -k3 -nr
3|Type3|93.5
2|Type2|82.5
5|Type5|82
1|Type1|75
4|Type4|57.5
或者在非单行代码形式中 + 删除 avg
变量,您可以在打印自身期间获得列的平均值(如果您进一步使用 avg
变量在程序中的任何地方然后你可以创建它):
awk '
BEGIN{
FS=","
OFS="|"
}
{
print $1,$3,($4 + $5)/2
}' Input_file |
sort -t'|' -k3 -nr
来自 man sort
页面:
-t, --field-separator=SEPuse SEP instead of non-blank to blank transition
关于awk - OFS 问题和排序在 Bash 中协同工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64389737/
我想插入 备注 关于要在我的 latex 文档的特定位置进行的修复 也许有一个 列表的“待办事项/修复我” 你怎么处理这个? 似乎一种方法是使用 fixme 包,但我无法使其工作。 有人在用吗? 最佳
错误:无法创建表。我已经创建了一个数据库,并且已经提供了所有特权。但仍然无法登录协作模块。我受够了,但我不想放弃。我已经尝试了所有可能的方法,但都行不通。 Stackoverflow 是我所知道的最好
我是一名优秀的程序员,十分优秀!