重複する要素を取り除く
Posted feedbacks - awk
ナイーブな実装。 % awk -f remove_multiples_1.awk 3 14 15 92 65 35 89 79 32 38 46 26 43 38 32 79 3 14 15 92 65 35 89 46 26 43 cat lion tiger lion cat tiger 1 2 1 0 2 0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | {
xs_size = split($0,xs)
remove_multiples(xs,xs_size)
for (i=1;i<=result_size;i++) printf result[i] " " ; printf "\n"
}
function remove_multiples(xs,xs_size, i) # 結果は result[], result_size へ
{
delete occurrence
for (i=1;i<=xs_size;i++) occurrence[xs[i]]++
delete result
result_size = 0
for (i=1;i<=xs_size;i++)
if (occurrence[xs[i]] == 1) result[++result_size] = xs[i]
}
|
配列を使わずにremove_multiples_1.awkと(ほぼ)同じ動作をする版。 % awk -f remove_multiples_2.awk 3 14 15 92 65 35 89 79 32 38 46 26 43 38 32 79 3 14 15 92 65 35 89 46 26 43 cat lion tiger lion cat tiger 1 2 1 0 2 0
1 2 3 4 5 6 7 8 9 10 | {
orig = $0
while (match(orig,/[^ ]+/)) {
item = substr(orig,RSTART,RLENGTH)
if (occurence[item]++ > 0) gsub(item " *","")
orig = substr(orig,RSTART+RLENGTH)
}
print
delete occurence
}
|


にしお
#3412()
Rating1/1=1.00
これはアレイのuniqの派生問題です。 リストとかアレイという言葉は言語によってまちまちの意味で使われているので、 「配列のようなもの」という漠然とした意味にとって構いません。
[ reply ]