X 행마다 중복 제거

X 행마다 중복 제거

AWD015F11awk를 사용하여 중복된 항목만 제거 할 수 있습니까 ? 열이 하나만 있는 큰 문서가 있습니다. 이는 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같은 것을 인쇄하는 것을 거부합니다.

관련 정보