私のファイルはセミコロンで区切られた複数列ファイルです。最初の列の重複レコードだけを削除したいと思います。また、最初の列でこれらの重複項目の数を計算したいと思います。どんな提案がありますか?
答え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
これにより、各項目がカウントで印刷されます(固有の項目は一度見つかり、一意でない項目は複数回見つかります)。