
AWD015F11
awkを使用して重複した項目のみを削除できますか?列が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
同じものを印刷することを拒否します。