
У меня есть файл с тремя столбцами, и мне нужно удалить строки, содержащие определенные дублирующиеся поля.
1 V(Cl8) 2.121
2 V(C1,H3) 2.067
3 V(Cl7) 2.121
4 V(Cl7) 1.347
5 V(C4,H6) 2.067
6 V(Cl8) 1.347
7 V(Cl8) 0.918
8 V(C1,Cl7) 1.220
9 V(C4,Cl8) 1.220
10 V(Cl7) 0.918
11 V(C1,C4) 1.958
12 C(Cl8) 7.668
13 C(Cl7) 7.668
14 C(C1) 2.087
15 C(C4) 2.087
16 C(Cl8) 2.267
17 C(Cl7) 2.267
18 V(C1,H2) 2.067
19 V(Cl8) 2.122
20 V(Cl7) 2.122
21 V(C4,H5) 2.067
Мне нужно удалить строки, содержащие повторяющиеся C(Cl8) и C(Cl7), чтобы в выводе было только одно вхождение каждого из них.
Я пробовал команды вроде sort
и uniq
, но все дублирующиеся строки удаляются.
Желаемый вывод (обратите внимание, что мне не важно, какое вхождение сохраняется, меня волнует только то, что у меня есть только одно C(Cl8)
и одно C(Cl7)
):
1 V(Cl8) 2.121
2 V(C1,H3) 2.067
3 V(Cl7) 2.121
4 V(Cl7) 1.347
5 V(C4,H6) 2.067
6 V(Cl8) 1.347
7 V(Cl8) 0.918
8 V(C1,Cl7) 1.220
9 V(C4,Cl8) 1.220
10 V(Cl7) 0.918
11 V(C1,C4) 1.958
13 C(Cl7) 7.668
14 C(C1) 2.087
15 C(C4) 2.087
16 C(Cl8) 2.267
18 V(C1,H2) 2.067
19 V(Cl8) 2.122
20 V(Cl7) 2.122
21 V(C4,H5) 2.067
решение1
Если вас не волнует, какой из дубликатов будет удален, и вы согласны оставить первое вхождение и удалить остальные, вы можете использовать:
$ awk '/C\(Cl8\)/ && ++a > 1{next} /C\(Cl7\)/ && ++b > 1{next}1' file | color -l 'C\(Cl7\)','C\(Cl8\)'
1 V(Cl8) 2.121
2 V(C1,H3) 2.067
3 V(Cl7) 2.121
4 V(Cl7) 1.347
5 V(C4,H6) 2.067
6 V(Cl8) 1.347
7 V(Cl8) 0.918
8 V(C1,Cl7) 1.220
9 V(C4,Cl8) 1.220
10 V(Cl7) 0.918
11 V(C1,C4) 1.958
12 C(Cl8) 7.668
13 C(Cl7) 7.668
14 C(C1) 2.087
15 C(C4) 2.087
18 V(C1,H2) 2.067
19 V(Cl8) 2.122
20 V(Cl7) 2.122
21 V(C4,H5) 2.067
решение2
Вот вариант:
$ sort -k2,2 file | sed -e 'N;s/^\(.*C(Cl7).*\)\n.*C(Cl7).*/\1/' -e 's/^\(.*C(Cl8).*\)\n.*C(Cl8).*/\1/' | sort -nk1,1
1 V(Cl8) 2.121
2 V(C1,H3) 2.067
3 V(Cl7) 2.121
4 V(Cl7) 1.347
5 V(C4,H6) 2.067
6 V(Cl8) 1.347
7 V(Cl8) 0.918
8 V(C1,Cl7) 1.220
9 V(C4,Cl8) 1.220
10 V(Cl7) 0.918
11 V(C1,C4) 1.958
12 C(Cl8) 7.668
13 C(Cl7) 7.668
14 C(C1) 2.087
15 C(C4) 2.087
# 16 C(Cl8) 2.267 removed
# 17 C(Cl7) 2.267 removed
18 V(C1,H2) 2.067
19 V(Cl8) 2.122
20 V(Cl7) 2.122
21 V(C4,H5) 2.067