PowerShell比較文本文件的兩個方法
需求:比較兩個文本文件,不相等時輸出行號和列號,和開始不相等的字符。
方法一:Compare-Object
利用PowerShell命令Compare-Object,非常值得學習。
function Compare-Files{
param(
$file1,
$file2,
[switch]$IncludeEqual
)
$content1 = Get-Content $file1
$content2 = Get-Content $file2
$comparedLines = Compare-Object $content1 $content2 -IncludeEqual:$IncludeEqual |
group { $_.InputObject.ReadCount } | sort Name
$comparedLines | foreach {
$curr=$_
switch ($_.Group[0].SideIndicator){
“==” { $right=$left = $curr.Group[0].InputObject;break}
“=>” { $right,$left = $curr.Group[0].InputObject,$curr.Group[1].InputObject;break }
“<=" { $right,$left = $curr.Group[1].InputObject,$curr.Group[0].InputObject;break }
}
[PSCustomObject] @{
Line = $_.Name
Left = $left
Right = $right
}
}
}
方法二,使用流處理比較
解釋:沒有使用內(nèi)置的string相等比較,而是定義了函數(shù) Diff-String,可以返回字符串首次不相等時的索引。
function Diff-Txt([io.fileinfo]$firstFile,[io.fileinfo]$secondFile)
{
#參數(shù)判斷
if( -not $firstFile.Exists)
{
throw "$firstFile 不存在"
}
if( -not $secondFile.Exists)
{
throw "$secondFile 不存在"
}
$sr1=[IO.StreamReader]$firstFile.FullName
$sr2=[IO.StreamReader]$secondFile.FullName
#內(nèi)部函數(shù):比較字符串
#返回-1表示相等,返回其它表示從$str1開始不等的索引
function Diff-String([string]$str1,[string]$str2)
{
for( $i=0; $i -lt $str1.Length; $i++)
{
if($i -lt $str2.Length)
{
if($str1[$i] -cne $str2[$i]){ return $i }
}
else { return $i }
}
if($str2.Length -gt $i ) { return $i }
return -1
}
# firstFile 沒到文件末尾
$line=1
while(-not $sr1.EndOfStream)
{
$str1 = $sr1.ReadLine()
# secondFile 到了文件末尾
if($sr2.EndOfStream)
{
Write-Host "=> [$line 行,1 列]"
}
# secondFile 沒到文件末尾
else
{
$str2 = $sr2.ReadLine()
$result = Diff-String -str1 $str1 -str2 $str2
if($result -ne -1)
{
Write-Host "<> [$line 行,$result 列] 字符->" -NoNewline
Write-Host $str1[$result] -ForegroundColor red
}
}
$line++
}
# 第二個文件沒到文件末尾
while( -not $sr2.EndOfStream)
{
$str2 = $sr2.ReadLine()
Write-Host "<= [$line 行,1 列]"
}
# 關閉文件流
$sr1.Close()
$sr2.Close()
}
測試用例一
輸入
第一個文件內(nèi)容為:
PowerShell
中文博客
jb51.net
荔非苔
第二個文件內(nèi)容為:
PowerShell
中文播客
jb51.Net
荔非苔
Mosser Lee
輸出:
![]() |
測試用例二
輸入
第一個文件內(nèi)容為:
玉樹臨風
馬上伊利
文章做作
第二個文件內(nèi)容為:
玉樹臨瘋
輸出:
![]() |
文章出處:http://www.pstips.net/
相關文章
PowerShell ISE中代碼轉(zhuǎn)換大小寫的技巧
這篇文章主要介紹了PowerShell ISE中代碼轉(zhuǎn)換大小寫的技巧,本文使用ISE內(nèi)置快捷鍵解決這個問題,需要的朋友可以參考下2015-03-03PowerShell腳本實現(xiàn)添加、修改任務計劃的例子
這篇文章主要介紹了PowerShell腳本實現(xiàn)添加、修改任務計劃的例子,PowerShell操作、設置任務計劃實例,需要的朋友可以參考下2014-08-08Powershell實現(xiàn)從注冊表獲取用戶配置腳本分享
這篇文章主要介紹了Powershell實現(xiàn)從注冊表獲取用戶配置腳本分享,本文直接給出實現(xiàn)腳本源碼,需要的朋友可以參考下2015-03-03Powershell中請求WebServices并以JSON格式輸出結(jié)果
這篇文章主要介紹了Powershell中請求WebServices并以JSON格式輸出結(jié)果,本文直接給出實現(xiàn)代碼,需要的朋友可以參考下2015-03-03PowerShell中使用curl(Invoke-WebRequest)的方法教程
這篇文章主要給大家介紹了關于在PowerShell中使用curl(Invoke-WebRequest)的方法教程,文中通過詳細的示例代碼給大家介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起看看吧。2017-08-08