我想从文件中删除重复的行,如下所示:
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和/或排序?
答案 0 :(得分:1)
尝试:
$ 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]++'
这将打印我们之前没有按任何顺序看到前两列的第一行。