X行ごとに重複排除

X行ごとに重複排除

AWD015F11awkを使用して重複した項目のみを削除できますか?列が1つしかない大きな文書があります。これは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同じものを印刷することを拒否します。

関連情報