我有大约 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
的全部功能.循环可以替换为
cat data/* > dnsFull
假设该文件最初为空。
然后是所有那些强制程序等待硬盘(通常是现代计算机系统中最慢的部分)的临时文件。使用管道:
cat data/* | sort | uniq > dnsOut
这仍然是浪费,因为
sort
单独可以做你正在使用的cat
和 uniq
为了;整个脚本可以替换为sort -u data/* > dnsOut
如果这仍然不够快,那么请意识到排序需要 O(n lg n) 时间,而使用 Awk 可以在线性时间内完成重复数据删除:
awk '{if (!a[$0]++) print}' data/* > dnsOut
关于shell - 合并多个文本文件并删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16873669/