每 X 行删除重复项

每 X 行删除重复项

是否可以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";
    }
}

链接到ideone: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,然后拒绝打印相同的内容。

相关内容