[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[问题求助] [已解决]PowerShell怎样删除大文件中的多余重复行?

本帖最后由 awk 于 2013-9-5 14:14 编辑

服务器上的数据文件,大概有三千多万行的数据。
对于重复出现的行,只保留第一次出现的就行了,把多余的删掉。

样例数据:
awk PowerShell-3
awk PowerShell-3
awk PowerShell-5
awk PowerShell-3
awk PowerShell-5
awk PowerShell-1
awk PowerShell-2

处理之后得到:
awk PowerShell-3
awk PowerShell-5
awk PowerShell-1
awk PowerShell-2

$spath="f:\Code\powershell\重复行.txt"
$dpath="f:\Code\powershell\去重复行.txt"

[System.Collections.Generic.HashSet[string]]$lines=Get-Content $spath -ReadCount 0
Set-Content  -Path $dpath -Value ($lines -join "`r`n")

以前写的,代码很简单,速度也不错,文件大时比较耗内存而已,可能需要3.0以上版本,2.0版的估计要修改下代码

TOP

  1. $AFile = "c:\test\a.txt"
  2. $DFile = "c:\test\add.txt"
  3. $Hash = @{}
  4. Get-Content $AFile | %{
  5. if(!$Hash.ContainsKey($_)){
  6. $_
  7. $Hash.Add($_ , 1)
  8. }
  9. } | Out-File $DFile
  10. $Hash.Keys
  11. CMD /C "PAUSE"
复制代码
1

评分人数

    • PowerShell: 赞:看来 汝也掌握了.net 哈希表之妙技术 + 1

TOP

版主说的不错,不同的字符串可能会产生相同的哈希值,这个要得看需求了,可以改用md5算法。

TOP

17楼的代码显然不行,实验后更不行。
1 貌似不应该用Get-Content。我想,或许,应该用streamreader。
2 貌似不应该用out-file -append。我想,或许,应该用stringbuilder
3 绝对不应该用string.gethashcode()  。具体原因参见 http://msdn.microsoft.com/zh-cn/ ... ng.gethashcode.aspx

说明
如果两个字符串对象相等,则 GetHashCode 方法返回相同的值。 但是,每个唯一的字符串值并没有唯一的哈希代码值。 不同的字符串可以返回相同的哈希代码。
有关哈希代码的更多信息,请参见 Object.GetHashCode。
对调用者的说明
GetHashCode  返回的值与平台相关。 在 32 位和 64 位版本的 .NET Framework 上有所不同。


这个问题比较难,或者说我水平太差。等我有空研究下。或者坐等牛人。

顾请楼主把标题改成未解决。
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

回复 17# luke


    正解。感谢!

TOP

$hashset=New-Object System.Collections.Generic.HashSet[int]
$duplicateFile="d:\1\duplicate.log"
$uniqueFile="d:\1\unique.log"
$sourceFile="D:\1\u_ex13061100.log"
Get-Content $sourceFile | %{
    if($hashset.add($_.GetHashCode())){
        $_ | Out-File -FilePath $uniqueFile -Append
    }else {
        $_ | Out-File  -FilePath $duplicateFile -Append
    }
}
1

评分人数

    • awk: 乐于助人技术 + 1

TOP

  1. get-content a.txt | sort -unique
复制代码
  1. get-content a.txt | sort | get-unique
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 12# PowerShell


    版主最近忙什么呢?数据放在顶楼好几天了,求代码啊。

TOP

回复 12# PowerShell


    我在顶楼放了点数据

TOP

这传的是哪门子教?口水教。。。
***共同提高***

TOP

谁最好给个测试用的数据,的压缩包的,下载地址啊。最好是长期的。
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

回复  Demon


    不甚明了,求指点
CrLf 发表于 2013-7-7 21:42


http://en.wikipedia.org/wiki/Hash_function

http://en.wikipedia.org/wiki/List_of_hash_functions

http://en.wikipedia.org/wiki/Hash_table

一个是算法,一个是基于此类算法的数据结构。
1

评分人数

    • CrLf: 感谢指点!技术 + 1

TOP

回复 7# Demon


    不甚明了,求指点

TOP

回复 5# PowerShell


我记得冒泡,二叉遍历之类的好像是用来排序的吧,以前学校里面学过,现在都忘了。
如果说错了请大家指正。
去重之前必须要排序吗?好复杂的说。

TOP

返回列表