세 개의 열이 있는 파일이 있고 특정 반복 필드가 포함된 행을 삭제해야 합니다.
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