如何使用第三列排序

时间:2016-02-26 18:21:09

标签: bash

我知道有一些问题。我尝试了他们提到的方法,但它不起作用。

我的数据在Book1.csv文件中,如下所示:enter image description here

然后我使用了bash代码:sort -r -n -k 3,3 Book1.csv > sorted.csv

但结果不是我想要的:enter image description here 我希望结果如下:enter image description here

另外,由于第一列是Id,第三列是得分,我想打印得分最高的ID。在这种情况下,它应该打印两个得分为50的id,如下所示:TRAAAAY128F42A73F0 TRAAAAV128F421A322如何实现它?

2 个答案:

答案 0 :(得分:1)

假设你的csv以逗号分隔而不是另一个分隔符,这是一种方法。但是,我认为如果不是全部都在awk中可能会有大部分内容,不幸的是我的知识仅限于awk,所以这就是我将如何快速完成。

首先根据评论,-t的{​​{1}}标记解决了您的排序问题。

sort

答案 1 :(得分:0)

虽然打印所有分数最高的ID可以使用基本的unix命令在bash中完成,但我认为此时切换到实际的脚本语言会更好。 (除非你在一些非常有限的环境中)

幸运的是,perl无处不在,打印分数最高的ID的任务可以在perl中作为一条(长)行完成:

perl -lne 'if (/^([^,]*),[^,]*,\s*([^,]*)/) {push @{$a{$2}},$1; if($2>$m) {$m=$2;}} END {print "@{$a{$m}}";}' Book1.csv