我要从如下文件中删除重复行:
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/