是否可以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
,然后拒绝打印相同的内容。