gpt4 book ai didi

linux - 根据两列(双向)删除重复行并按第三列排序

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:35:43 24 4
gpt4 key购买 nike

我想从如下所示的文件中删除重复的行:

A   B   1e-149
A B 7e-136
A C 6e-147
A C 3e-131
B C 0.0
B A 4e-150
B A 1e-136
C B 0.0
C A 5e-148
C A 7e-135

基于第 1 列和第 2 列。

到目前为止,我正在尝试:

awk '!a[$1$2]++' file

结果

A   B   1e-149
A C 6e-147
B C 0.0
B A 4e-150
C B 0.0
C A 5e-148

但是,我还想删除那些在第 2 列和第 1 列中也找到了字段的行。理想情况下,我想保留第三列中具有最低值的那些,从而导致:

B   A   4.00E-150
B C 0
C A 5e-148

有没有办法使用 awk 和/或 sort 来做到这一点?

最佳答案

尝试:

$ sort -g -k3 file | awk '!a[$1$2]++ && !a[$2$1]++' 
B C 0.0
B A 4e-150
C A 5e-148

工作原理

  • 排序 -g -k3 文件

    这会在第 3 列按数字对文件进行排序,以便第 3 列中的最小值排在第一位。

  • awk '!a[$1$2]++ && !a[$2$1]++'

    这会打印第一行,我们之前没有以任何顺序看到前两列。

关于linux - 根据两列(双向)删除重复行并按第三列排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49343171/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com