我有一个大文件 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/