我有一个如下所示的文件,我想保留第三个字段上具有最高值的第一个和第二个字段之间的组合(带箭头的那些,箭头不包含在实际文件中) 。
1 1 10
1 1 12 <-
1 2 6 <-
1 3 4 <-
2 4 32
2 4 37
2 4 39
2 4 40 <-
2 45 12
2 45 15 <-
3 3 12
3 3 15
3 3 17
3 3 19 <-
3 15 4
3 15 9 <-
4 17 25
4 17 28
4 17 32
4 17 36 <-
4 18 4 <-
为了拥有和输出这样:
1 1 12
1 2 6
1 3 4
2 4 40
2 45 15
3 3 19
3 15 9
4 17 36
4 18 4
我想也许我只是玩sort
和uniq
命令,但我弄得一团糟。
有什么想法吗?
非常重要的说明:条目从一开始就没有整齐排序,我只是使用了sort -k1,1 -k2,2 -k3,3
先谢谢你们
答案 0 :(得分:2)
这有点好笑,但是:
sort -nr myfile.txt | rev | uniq -f1 | rev | sort -n
输出:
1 1 12
1 2 6
1 3 4
2 4 40
2 45 15
3 15 9
3 3 19
4 17 36
4 18 4
工作原理:
uniq
)可能不是世界上效率最高的,但至少每一步都有道理。
答案 1 :(得分:2)
sort
的两次传递应该执行此操作,例如在bash
shell
sort -k1,1n -k2,2n -k3,3nr -t$'\t' file | sort -k1,1n -k2,2n -t$'\t' -u -s
1 1 12
1 2 6
1 3 4
2 4 40
2 45 15
3 3 19
3 15 9
4 17 36
4 18 4
答案 2 :(得分:0)
sort -nr myfile.txt | rev | uniq -f1 -f2 -f3 -f4 | rev | sort -n
对于我需要对显示字段 2 和字段 4 的最高值的 4 列进行排序的文件,上述方法非常有效
STORE402 27 8 1 21-04-2021_07:55:01
STORE402 34 8 3 19-04-2021_11:40:01
STORE402 34 8 3 19-04-2021_15:05:01
STORE402 36 8 4 21-04-2021_12:05:01
STORE402 40 8 5 19-04-2021_12:20:01
STORE402 43 8 6 20-04-2021_10:40:01
运行命令后的输出:
STORE402 43 8 6 20-04-2021_10:40:01