我要从如下文件中删除重复行:

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

工作原理
sort -g -k3 file
这将对第3列中的文件进行数字排序,以便第3列中的最低值优先。
awk '!a[$1$2]++ && !a[$2$1]++'
这将按两种顺序打印我们以前没有看到的前两列的第一行。

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

10-11 01:19