加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

shell – 组合多个文本文件并删除重复

发布时间:2020-12-16 01:32:32 所属栏目:安全 来源:网络整理
导读:我有大约350个文本文件(每个文件大约75MB).我试图组合所有的文件和删除重复的条目.文件格式如下: ip1,dns1ip2,dns2... 我写了一个小shell脚本来做到这一点 #!/bin/bashfor file in data/*do cat "$file" dnsFulldonesort dnsFull dnsSorteduniq dnsSorted d
我有大约350个文本文件(每个文件大约75MB).我试图组合所有的文件和删除重复的条目.文件格式如下:
ip1,dns1
ip2,dns2
...

我写了一个小shell脚本来做到这一点

#!/bin/bash
for file in data/*
do
    cat "$file" >> dnsFull
done
sort dnsFull > dnsSorted
uniq dnsSorted dnsOut
rm dnsFull dnsSorted

我经常做这个处理,并且想知道在运行它时是否有任何可以改进的处理方式.我可以接受任何编程语言和建议.谢谢!

首先,你没有使用猫的全部力量.循环可以被替换
cat data/* > dnsFull

假设该文件最初为空.

那么所有那些迫使程序等待硬盘的临时文件(通常是现代计算机系统中最慢的部分).使用管道:

cat data/* | sort | uniq > dnsOut

这仍然是浪费,因为只要单独做你正在使用的猫和uniq;整个脚本可以替换

sort -u data/* > dnsOut

如果这还不够快,那么意识到排序需要O(n lg n)个时间,而重复数据删除可以用线性时间与Awk进行:

awk '{if (!a[$0]++) print}' data/* > dnsOut

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读