python - 获取重复的行和文件的其余部分 [大文件 50G]

标签 python sed

我有一个大文件 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 行缓冲区并匹配重复行的模式。如果没有,第一行将打印到标准输出,然后删除并重复,直到出现重复行。
对于重复的行,首先处理文件结束的边缘情况,其中所有剩余的行都输出到 duplicatesFile并停止处理。
对于另一种情况,模式空间被复制到保持空间,然后分成重复和非重复。然后写入的重复项 duplicatesFile和非重复的,以换行符开头,然后使用 D 删除换行符导致重新运行 sed 命令的命令减去从 file 隐式获取下一行的命令.
注意Sed 从来都不是最快的解决方案,也许在这种情况下,一段专用代码可能会提供所需的速度。

关于python - 获取重复的行和文件的其余部分 [大文件 50G],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69675478/

相关文章:

python - 智能自动抓取

python - 如何在不调用文件的情况下运行全局代码

python - 初始化中……命令 'sox'返回了非零的退出状态2

regex - bash sed/grep 提取两个词之间的文本

linux - 使用 sed 或 VIM 将空格替换为新行

python - 在 Python 中获得响应后模拟 requests.json

python - psutil 虚拟内存测量单位?

android - 如何使用 "sed"或其他 linux 终端实用程序解析其他两个之间的字符串 fragment ?

linux - sed 或 awk 命令将两行合并为一行

linux - 编辑所有的 Bash 脚本