python - 获取重复行和文件的其余部分[大文件50G]
问题描述
我有一个50G的大文件,我想获取重复的行和文件的其余部分,我使用两个命令来获取结果,这需要很长时间。
sort file.tsv | uniq -d > duplicateList.tsv
sort file.tsv | uniq -u > clean_List.tsv
如您所见,该过程重复了两次,我只想制作一个命令并返回两个结果而不使用重复的命令
注意我可以使用 linux commande 或 Python 脚本
解决方案
这可能对您有用(GNU sed),假设文件已经排序:
sed -Ee 'N;/^(.*)\n\1$/!{P;D};:a;$w duplicatesFile' \
-e '$d;N;/(\n.*)\1$/ba;h;s/.*\n/\n/;x;s/(.*)\n.*/\1/w duplicatesFile' \
-e 'x;D' file > nonduplicatesFile
概述:重复项被写入 ,duplicatesFile
其余部分stdout
被重定向到nonduplicatesFile
.
最初创建了一个 2 行缓冲区并对其进行图案匹配以匹配重复的行。如果不是,则将第一行打印到 stdout,然后删除并重复,直到出现重复行。
对于重复的行,首先处理文件结尾的边缘情况,其中所有剩余的行都输出到duplicatesFile
并停止处理。
对于另一种情况,模式空间被复制到保持空间,然后拆分为重复和非重复。写入 thenduplicatesFile
和非重复的重复项,以换行符开头,然后使用D
导致 sed 命令重新运行的命令删除换行符,而不是从file
.
NB Sed 从来都不是最快的解决方案,也许在这种情况下,一段专用代码可能会提供所需的速度。
推荐阅读
- azure - 从 Microsoft 计算机视觉 OCR 生成 hOCR
- vba - 使用嵌套 WorksheetFunction 求和
- .htaccess - htaccess 重定向缺少斜杠,而是附加到域 tld
- html - 如何从我的 .htaccess 中的 301 重定向中排除子域(cdn.domain.com)?
- c - c中的Read():读取额外的字符
- postgresql - 以解析树形式执行 postgres 查询
- algorithm - 对角线读取矩阵的算法(所有对角线)
- python - 如果条目在不同的数据框 Python 上匹配,则写入新列
- visual-studio-code - Q# 由于 DotNet Core 无法找到工作区
- javascript - 如何将 ref 附加到我使用 React.cloneElement 复制的组件