gpt4 book ai didi

shell - 合并多个文本文件并删除重复项

转载 作者:行者123 更新时间:2023-12-04 00:04:01 27 4
gpt4 key购买 nike

我有大约 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单独可以做你正在使用的 catuniq为了;整个脚本可以替换为
sort -u data/* > dnsOut

如果这仍然不够快,那么请意识到排序需要 O(n lg n) 时间,而使用 Awk 可以在线性时间内完成重复数据删除:
awk '{if (!a[$0]++) print}' data/* > dnsOut

关于shell - 合并多个文本文件并删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16873669/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com