首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >uniq排序解析

uniq排序解析
EN

Stack Overflow用户
提问于 2018-04-19 20:43:47
回答 5查看 72关注 0票数 1

我有一个文件,其中字段用";“分隔,如下所示:

代码语言:javascript
复制
test;group;10.10.10.10;action2
test2;group;10.10.13.11;action1
test3;group3;10.10.10.10;action3
tes4;group;10.10.10.10;action4
test5;group2;10.10.10.12;action5
test6;group4;10.10.13.11;action8

我想标识所有非唯一的IP地址(第3列)。对于该示例,提取应为:

代码语言:javascript
复制
test;group;10.10.10.10;action2
test3;group3;10.10.10.10;action3
tes4;group;10.10.10.10;action4
test2;group;10.10.13.11;action1
test6;group4;10.10.13.11;action8

按IP地址排序(第3列)。

Ssing简单的命令,如catuniqsortawk (不是Perl,不是Python,只有shell)。

有什么想法吗?

EN

回答 5

Stack Overflow用户

发布于 2018-04-19 20:52:30

代码语言:javascript
复制
$ awk -F';' 'NR==FNR{a[$3]++;next}a[$3]>1' file file|sort -t";" -k3
test;group;10.10.10.10;action2
test3;group3;10.10.10.10;action3
tes4;group;10.10.10.10;action4
test2;group;10.10.13.11;action1
test6;group4;10.10.13.11;action8

  • awk拾取所有重复的($3)行,
  • sort by ip
票数 3
EN

Stack Overflow用户

发布于 2018-04-19 20:58:56

您还可以使用grepcutsortuniq和中间的临时流程替换来尝试此解决方案。

代码语言:javascript
复制
grep -f <(cut -d ';' -f3 file | sort | uniq -d) file | sort -t ';' -k3

它并不是很优雅(实际上我更喜欢上面给出的awk答案),但我认为值得分享,因为它实现了你想要的东西。

票数 1
EN

Stack Overflow用户

发布于 2018-04-19 21:29:47

这与Kent的答案非常相似,但只有一次遍历文件。权衡的是内存:您需要存储要保留的行。这使用GNU awk作为PROCINFO变量。

代码语言:javascript
复制
awk -F';' '
    {count[$3]++; lines[$3] = lines[$3] $0 ORS} 
    END {
        PROCINFO["sorted_in"] = "@ind_str_asc"
        for (key in count) 
            if (count[key] > 1) 
                printf "%s", lines[key]
    }
' file

等价的perl

代码语言:javascript
复制
perl -F';' -lane '
    $count{$F[2]}++; push @{$lines{$F[2]}}, $_
  } END {
    print join $/, @{$lines{$_}}
        for sort grep {$count{$_} > 1} keys %count
' file
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49921461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档