在Bash脚本中添加和排序值

时间:2019-05-10 15:50:41

标签: bash sorting

我一直在尝试解决此问题,但我尝试过的所有方法均未真正起作用。我有一个表,该表(来自.txt文件)中需要按表的特定原始数据的数字顺序进行排序。

我拥有的数据是这样组成的:

Name  Team Age    
David  a   20   
James  b   25   
Anthony  c   22  
Carter  b   21   
Jessica  a   24   

基本上我需要订购(从最小到最大)某个团队的年龄,例如A。因此,预期输出为:

a 20    
a 24  

4 个答案:

答案 0 :(得分:1)

awk '$2==team{print $2,$3}' team='a' file | sort -t' ' -k2n

答案 1 :(得分:0)

您可以使用SQL以及SUM和GROUP BY函数非常轻松地处理此问题:

SELECT team, SUM(age) FROM table1 GROUP BY team;

+------+----------+
| team | SUM(age) |
+------+----------+
| a    |       44 |
| b    |       46 |
| c    |       22 |
+------+----------+

答案 2 :(得分:0)

仅重击显然不是这项工作的最佳工具。

如果您像我一样喜欢Bash代码,您可能仍然会对仅Bash的解决方案感兴趣(嗯,几乎,让我们不要重新发明STDOUT ing):

sort

关联数组不是Bash最具可读性的功能。

答案 3 :(得分:0)

一个awk解决方案,无需单独的管道和子外壳即可进行排序:

awk '$2 == "a" {arr[$3]} END {for (i in arr) print "a", i}' file

您只需将age作为索引存储在数组中,然后在末尾输出索引即可提供固有的排序,而无需单独的过程,例如

使用/输出示例

$ awk '$2 == "a" {arr[$3]} END {for (i in arr) print "a", i}' file
a 20
a 24

调用外部sort可以减少键入的字符数,但是可以增加管道的额外开销以及sort所需的子外壳,例如

awk '$2 == "a" {print $2, $3}' file | sort

(相同的输出)