首页 > 系统服务 > 详细

shell 去重

时间:2021-07-02 01:05:17      阅读:17      评论:0      收藏:0      [点我收藏+]

方法一

cat data.txt | sort -rnk2 | awk ‘{if (!keys[$1]) print $0; keys[$1] = 1;}‘
先按照第二列逆序排列,保证数字从大到小输出,然后再用 awk,只有第一列的字符串第一次出现才输出这个字符串,其他的丢弃,这样应该就可以解决问题了。但是这种方法可能会让 awk 占用很多的内存,文件过大的话有问题。

方法二

cat data.txt | sort -k1,1 | awk ‘{
    if (lastKey == $1) {
        if (lastValue < $2) {
            lastLine = $0;
            lastValue = int($2);
        }
    } else {
        if (lastLine) {
            print lastLine;
        }

        lastKey = $1;
        lastLine = $0;
        lastValue = int($2);
    }
} END {
    if (lastLine) {
        print lastLine;
    }
}‘

这个方案是按照第一列排序,然后用 awk 筛选结果,筛选的过程相当于一个加强版的 uniq。这个方案在内存使用方面好了很多,不过代码量略多,不是很简洁。

shell 去重

原文:https://www.cnblogs.com/jason-zhao/p/14960499.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!