awk で重複した要素をユニークな要素だけにする方法


awk でやってみましたが、Perl のようにスマートじゃないですね。また、以下のものはそんなに汎用性があるわけではありません。

#! /usr/bin/gawk -f
BEGIN {
    for (i = 1; i <= 10; i++) {
        arr[i] = int(i / 2);
    }
    print "***** not be uniqed.";
    for (i in arr) {
        print arr[i];
    }
    uniq_array(arr);
    print "***** be uniqed.";
    for (i in arr) {
        print arr[i];
    }
}

# uniq_array - sort array and uniq array
#   input:  array
#   output: sorted and uniqed array
function uniq_array(arr,    i, n_arr) {
    n_arr = asort(arr);
    for (i = 1; i < n_arr; i++) {
        if (arr[i] == arr[i + 1]) {
            delete arr[i];
        }
    }
}

結果はこんな感じ。

$ gawk -f uniq_array.awk
***** not be uniqed.
2
2
3
3
4
4
5
0
1
1
***** be uniqed.
2
3
4
5
0
1