有一個成績檔案的內容如下

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顯示的方向不同!

創作者介紹

PowerShell@HungYuWu

ayowu 發表在 痞客邦 PIXNET 留言(0) 人氣()