AWD015F11
awk를 사용하여 중복된 항목만 제거 할 수 있습니까 ? 열이 하나만 있는 큰 문서가 있습니다. 이는 24줄마다 발생합니다.
나는 작동할 패턴을 찾기 위해 행 수를 세어 보았습니다. 보시다시피 다른 중복 행이 있지만 문제는 AWD015F11
.
5000
5000
false
false
AWD015F11
425
25
34
1
5000
5000
320
320
OH,AWD015F
false
true
8
50
32
0
5
9
9
true
-34
0
false
false
AWD015F11
AWD015G21
답변1
가능한 경우 PERL
아래 코드를 사용하여 파일에서 모든 중복 항목을 제거하세요. 첫 번째 고유한 AWD###### 줄을 인쇄하고 파일의 나머지 줄은 인쇄되지 않습니다.
#!/usr/bin/perl
%data=();
foreach $r ( <STDIN> ) {
chomp($r);
if($r =~ /^AWD[A-Za-z0-9]{6}$/){
if(!exists($data{$r})){
$data{$r} = 1;
print "$r\n";
}
} else {
print "$r\n";
}
}
아이디어원 링크:http://ideone.com/0SFQQ4
나는 이것이 당신이 원하는 것이라고 생각합니다.
답변2
그리고awk
awk '!/^AWD015F11$/ {print $0}; /^AWD015F11$/ && found<1 {found++; print $0}' foo
예
$ cat foo | wc -l
30
$ awk '!/^AWD015F11$/ {print $0}; /^AWD015F11$/ && found<1 {found++; print $0}' foo | wc -l
29
$ cat foo
5000
5000
false
false
AWD015F11
425
25
34
1
5000
5000
320
320
OH,AWD015F
false
true
8
50
32
0
5
9
9
true
-34
0
false
false
AWD015F11
AWD015G21
$ awk '!/^AWD015F11$/ {print $0}; /^AWD015F11$/ && found<1 {found++; print $0}' foo
5000
5000
false
false
AWD015F11
425
25
34
1
5000
5000
320
320
OH,AWD015F
false
true
8
50
32
0
5
9
9
true
-34
0
false
false
AWD015G21
답변3
n=$(set '' p n p n;printf "\n%b$@$@$@$@$@$@\n \c")
sed -ne"/^AWD015F11/{:n$n$n};s///;t" -ep <in
작업 sed
. 그것은 n;p
그것을 본 후 23번만 하고 ^AWD
같은 것을 인쇄하는 것을 거부합니다.