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

$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

回复 17# luke


    正解。感谢!

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

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

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

$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

返回列表