有一個成績檔案的內容如下
name,math,English,Japanese
ayo,100,95,60
Joseph,95,90,65
Pan,80,90,100
JuJu,75,80,95
第一列為標題 分別為名字,數學成績,英文成績,日語成績
之後有四筆資料
欄位之間均以逗號","分隔
我們可使用Import-Csv
將檔案內容讀入
Import-Csv -Path D:\score.txt
結果如下
(1)假設想要過濾數學成績大於等於八十分的資料
其SQL語法為
select * from score where math>80
在PowerShell中則可使用where-object去過濾
其語法為
Where-Object {[int]$_.math -ge 80 }
$_ 代表某筆資料
$_.math 代表某筆資料的數學成績
[int] 代表將資料轉型為整數;由於從文字檔讀入預設都是文字
-ge 代表大於等於
因此整個過濾命令為
Import-Csv -Path D:\score.txt | Where-Object {[int]$_.math -ge 80 }
結果如下
(2)假設想要過濾數學成績大於等於八十分且英文大於九十分的資料
其SQL語法為
select * from score where math>80 and english>90
在PowerShell中則可使用where-object去過濾
其語法為
Where-Object {[int]$_.math -ge 80 -and [int] $_.english -gt 90 }
-and 代表邏輯上的and
因此整個過濾命令為
Import-Csv -Path D:\score.txt | Where-Object {[int]$_.math -ge 80 -and [int]$_.english -gt 90 }
結果如下
(3)假設想要列出名字以及總分
其SQL語法為
select name, math+english+japanse as Total from score
在PowerShell中則可使用add-member加入新的欄位
其語法為
add-member -inputobject $_ -membertype noteproperty -name Total
-value ([int]$_.math+[int]$_.english+[int]$_.japanese) -PassThru
代表新增一個欄位名稱為 Total
其值為math+english+japanese的欄位
若僅要選出部分欄位作為輸出的結果則可使用format-table並且指定預選出的欄位名稱
因此整個命令為
Import-Csv -Path D:\score.txt | foreach{add-member -inputobject $_
-membertype noteproperty -name Total
-value ([int]$_.math+[int]$_.english+[int]$_.japanese) -PassThru} |
format-table name , total -auto
foreach 代表針對每筆資料做處理
結果如下
(4)假設要計算各科平均
其SQL語法為
select Average(math) as mathAvg,Average(english) as engAvg, Average(japanse) as japAvg from score
可得到
mathAvg engAvg japAvg
87.5 88.75 80
在PowerShell中則可使用Measure-Object計算平均
其語法為
Measure-Object -Property math,english,japanese -Average
-Property 代表所要計算的欄位
-Average 代表要計算平均
因此整個命令為
Import-Csv -Path D:\score.txt |
Measure-Object -Property math,english,japanese -Average |
format-table Property,average -auto
結果如下
[註]目前的解法為橫式顯示與SQL顯示的方向不同!