如何使用AWK基于字段打印非重复行?

时间:2010-12-10 13:54:19

标签: unix awk

我希望使用AWK基于第一个字段打印非重复行。有人可以帮忙吗?

由于

    Input 

    1 28324 2077 2 1
    1 24682 2088 1 0
    1 25399 2074 1 0
    2 28925 1582 2 1
    3 30254 1450 1 0
    4 25552 1131 1 1
    4 31033 1134 1 0
    5 29230 1522 2 0


    Desired Output 
    2 28925 1582 2 1
    3 30254 1450 1 0
    5 29230 1522 2 0

3 个答案:

答案 0 :(得分:3)

awk '
(count[$1]++ < 1) { data[$1] = $0; }
END               { for (x in data) if (count[x] == 1) print data[x]; }
'

如果输出应在第一列上排序,请将其通过sort -nk1

答案 1 :(得分:1)

如果您的数据已排序,则可以使用不会累积潜在大数据的数据。

awk '
    $1 != prev { if (count == 1) print line; count = 0 }
               { prev=$1; line = $0; ++count }
           END { if (count == 1) print }' inputfile

答案 2 :(得分:1)

对于第一列中的固定数量的字符和支持 -w 选项的 uniq 实现:

sort infile|uniq -uw1