PowerShell比較文本文件的兩個(gè)方法
需求:比較兩個(gè)文本文件,不相等時(shí)輸出行號和列號,和開始不相等的字符。
方法一:Compare-Object
利用PowerShell命令Compare-Object,非常值得學(xué)習(xí)。
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,可以返回字符串首次不相等時(shí)的索引。
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++
}
# 第二個(gè)文件沒到文件末尾
while( -not $sr2.EndOfStream)
{
$str2 = $sr2.ReadLine()
Write-Host "<= [$line 行,1 列]"
}
# 關(guān)閉文件流
$sr1.Close()
$sr2.Close()
}
測試用例一
輸入
第一個(gè)文件內(nèi)容為:
PowerShell
中文博客
jb51.net
荔非苔
第二個(gè)文件內(nèi)容為:
PowerShell
中文播客
jb51.Net
荔非苔
Mosser Lee
輸出:
![]() |
測試用例二
輸入
第一個(gè)文件內(nèi)容為:
玉樹臨風(fēng)
馬上伊利
文章做作
第二個(gè)文件內(nèi)容為:
玉樹臨瘋
輸出:
![]() |
文章出處:http://www.pstips.net/
相關(guān)文章
Powershell獲取系統(tǒng)中所有可停止的服務(wù)
這篇文章主要介紹了Powershell獲取系統(tǒng)中所有可停止的服務(wù),本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下2015-03-03PowerShell ISE中代碼轉(zhuǎn)換大小寫的技巧
這篇文章主要介紹了PowerShell ISE中代碼轉(zhuǎn)換大小寫的技巧,本文使用ISE內(nèi)置快捷鍵解決這個(gè)問題,需要的朋友可以參考下2015-03-03PowerShell腳本實(shí)現(xiàn)添加、修改任務(wù)計(jì)劃的例子
這篇文章主要介紹了PowerShell腳本實(shí)現(xiàn)添加、修改任務(wù)計(jì)劃的例子,PowerShell操作、設(shè)置任務(wù)計(jì)劃實(shí)例,需要的朋友可以參考下2014-08-08Powershell實(shí)現(xiàn)從注冊表獲取用戶配置腳本分享
這篇文章主要介紹了Powershell實(shí)現(xiàn)從注冊表獲取用戶配置腳本分享,本文直接給出實(shí)現(xiàn)腳本源碼,需要的朋友可以參考下2015-03-03PowerShell實(shí)現(xiàn)參數(shù)互斥示例
這篇文章主要介紹了PowerShell實(shí)現(xiàn)參數(shù)互斥示例,本文直接給出示例代碼,需要的朋友可以參考下2015-06-06PowerShell實(shí)現(xiàn)在字符串中查找大寫字母
這篇文章主要介紹了PowerShell實(shí)現(xiàn)在字符串中查找大寫字母,本文講解使用.NET中的IsUpper()函數(shù)來實(shí)現(xiàn)查找大寫字母的需求,需要的朋友可以參考下2015-06-06Powershell中請求WebServices并以JSON格式輸出結(jié)果
這篇文章主要介紹了Powershell中請求WebServices并以JSON格式輸出結(jié)果,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下2015-03-03PowerShell中使用curl(Invoke-WebRequest)的方法教程
這篇文章主要給大家介紹了關(guān)于在PowerShell中使用curl(Invoke-WebRequest)的方法教程,文中通過詳細(xì)的示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。2017-08-08