微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从两组文本文件中提取独特的行

两个目录中的每一个都有一个或多个文本文件,A:和B :. 目的是打印一个包含A:中存在的所有行的文本文件

(每个文本文件最多可以包含2百万行,如果A:有两个或更多的唯一行(即只在A:而不是在B:中)彼此相同,那么只有其中一行需要被列在unique.txt输出中,order [sort]的列表并不重要。)

感谢列文Keersmaekers下面的脚本(干净和快速)。 然而,我似乎在unique.txt文件中被截断(在字符120;或包装),而不是完全按照A:中的方式打印整个唯一行。

compare -r $(gc C:a*.txt | sort -u) -d $(gc C:b*.txt | sort -u) | ? {$_.SideIndicator -eq '<='} | select inputobject | Out-File unique.txt

我试图与这些玩,以获得完整的,未包装的线,但没有成功:

如何删除同一程序的gui和命令行界面之间的语言环境差异?

当传递的参数有引号时使用DOS启动命令

学习控制台命令的重要性

我怎样才能通过CMD最大化一个特定的窗口?(窗口)

在Java中使用cmd复制文件时出现问题

Format-Table -Wrap -AutoSize |

我做错了什么? Windows cmd行PowerShell将工作。

这个gcc编译器命令中的-z选项是什么?

如何从PHP中的控制台中删除文本?

使用man命令描述我的文件

如何从Windows命令行运行python文件(.py)而不必先键入python?

在bash脚本中,在脚本退出后的提示符上打印命令(作为build议)

以下可能会让你开始。

短版本(使用别名)

compare -r $(gc C:a*.txt | sort -u) -d $(gc C:b*.txt | sort -u) | ? {$_.SideIndicator -eq '<='} | select -expand inputobject | Out-File unique.txt

长版

Compare-Object -ReferenceObject $(Get-Content C:a*.txt | sort-object -Unique) -DifferenceObject $(Get-Content C:b*.txt | sort-object -Unique) | Where-Object {$PSItem.SideIndicator -eq '<='} | Select-Object -ExpandProperty inputobject | Out-File unique.txt

请注意,我不能动摇与<=的比较的能力,应该更好地处理,但我不能轻易找到一种方法

使用sort -u , bash和combine :

combine <(sort -ua/* ) not <(sort -ub/*)

上面假定不需要重复行,并且Windows文件系统安装在Linux机器上,或者可以从Linux机器访问。

请注意, combine不需要排序数据,它可以以任意顺序显示来自A:*行,并返回未排序的输出,例如:

combine <(cat a/*) not <(cat b/*)

…但是这失去了不显示重复行的属性,如果A:*包含比B:*更多的给定行的重复项。

应该是有点性能的最天真的解决方案将是类似的

$inB = [system.collections.generic.HashSet[string]]::new([string[]](Get-Content B* | select -unique)) Get-Content A* | Where-Object { ! $inB.Contains($_) } | Out-File onlyinA.txt

但是,您将支付B中所有文件的所有唯一行。 唯一的解决办法就是过滤A中的行,然后删除B中更多的行。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐