如何使用 AWK 根据字段打印不重复的行?

发布于 2024-10-06 21:14:18 字数 342 浏览 2 评论 0原文

我希望使用 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

I wish to print the non duplicated rows based on the 1st field using AWK. Could anyone please kindly help?

Thanks

    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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

祁梦 2024-10-13 21:14:19
awk '
(count[$1]++ < 1) { data[$1] = $0; }
END               { for (x in data) if (count[x] == 1) print data[x]; }
'

如果输出应在第一列上排序,请通过 sort -nk1 进行管道传输。

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

If the output should be sorted on the first column, pipe it through sort -nk1.

凡间太子 2024-10-13 21:14:19

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

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

If your data is sorted, you can use this which doesn't accumulate a potentially large array.

awk '
    $1 != prev { if (count == 1) print line; count = 0 }
               { prev=$1; line = $0; ++count }
           END { if (count == 1) print }' inputfile
一人独醉 2024-10-13 21:14:19

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

sort infile|uniq -uw1

For fixed number of characters in the first column and uniq implementation that supports -w option:

sort infile|uniq -uw1
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文