UNIXサーバー上のファイル内の重複エントリの識別

UNIXサーバー上のファイル内の重複エントリの識別

私のファイルはセミコロンで区切られた複数列ファイルです。最初の列の重複レコードだけを削除したいと思います。また、最初の列でこれらの重複項目の数を計算したいと思います。どんな提案がありますか?

ベストアンサー1

次のように動作する必要があります。

awk -F";" '!seen[$1]++{print}END {for (i in seen) if (seen[i]>1) print i,"found :" seen[i] "times"}' file

ENDの前の最初の部分はシミュレートされたコピーを印刷しませんuniq。つまり、項目が複数回見つかった場合は、最初の項目のみが印刷されます。

ENDのコードは、何度も見つかったすべての項目を印刷します。

純粋に一意のアイテムを印刷する必要がある場合(シミュレーションは、アイテムがuniq -u複数回見つかった場合はまったく印刷されないことを意味します)、次のものを使用できます。

awk -F";" '{seen[$1]++}END {for (k=1;k<=2;k++) for (i in seen) if (seen[i]==1) {print i;delete seen[i];continue} else {print i,"found :" seen[i] "times"}}' file

これにより、配列が2回繰り返されます。最初は実際のuniq項目を印刷し、2番目は重複項目を印刷します。

選択する:

awk -F";" '{seen[$1]++}END {for (i in seen) print "found :" seen[i] "times:",i}' file |sort

これにより、各項目がカウントで印刷されます(固有の項目は一度見つかり、一意でない項目は複数回見つかります)。

おすすめ記事