ファイルを並べ替えたくないので、元の順序を維持しながら重複した行をフィルタリングします。ソート機能なしでソートの独自の機能を使用する方法はありますか(cat -u
存在する場合は同様の機能を提供します)。隣接する行だけを表示するのでuniq
なくても使用することはsort
意味がないので、まずファイルを並べ替える必要があります。uniq
uniq
しかし、との違いは正確に何ですかuniq --unique
? Pastebinのランダムファイルのコマンドは次のとおりです。
wget -qO - http://pastebin.com/0cSPs9LR | wc -l
350
wget -qO - http://pastebin.com/0cSPs9LR | sort -u | wc -l
287
wget -qO - http://pastebin.com/0cSPs9LR | sort | uniq | wc -l
287
wget -qO - http://pastebin.com/0cSPs9LR | sort | uniq -u | wc -l
258
簡単に言うと:
- ソートせずに重複するアイテムを貪欲にフィルタリングする方法は?
- なぜ
uniq
十分にユニークではないのですかuniq --unique
?
ps この質問は、次の質問と重複しているように見えますが、そうではありません。
答え1
私はPerlとHashingを使います。
それは次のとおりです。
#!/usr/bin/perl
use strict;
use warnings;
my %seen;
while ( <> ) {
print unless $seen{$_}++;
}
私はこれが次のように簡単に理解できると思います。
perl -ne 'print unless $seen{$_}++' data.txt
(または猫データが入ります)。
これは一意の行全体を取得するのに効果的です。分割または正規表現を使用してサブセットを比較することもできます。
例えば
while ( <> ) {
my @fields = split ( ";" );
print unless $seen{$fields[4]}++;
}
行はベースでフィールドに分割され、;
5番目のフィールドのみが比較されます(配列の最初のフィールドは0です)。