PowerShellでtailコマンドを実現する方法!txt/csv/Excelファイル対応!

powershell

PowerShellでtailコマンドを実現する方法を知りたいときはないでしょうか。

けど、そんな中で悩むことは、

・PowerShellでtailコマンドを実現する方法がわからない
・PowerShellでtxt/csv/Excelファイルの末尾の行を取得する方法がわからない

ですよね。

今回はそんなお悩みを解決する

・PowerShellでtailコマンドを実現し、txt/csv/Excelファイルの末尾の行を取得する方法

についてまとめます!

PowerShellでtailコマンドを実現する方法

PowerShellでtailコマンドを実現する方法は、PowerShellには、tailコマンドに相当するコマンドレットとしてGet-Contentがありますので、このコマンドレットを使用します。また、末尾の行の指定については-Tailパラメータを使用してデータを取得しています。

PowerShellのGet-Contentの構文は?

PowerShellのGet-Contentの構文について説明をします。
PowerShellのGet-Contentは、PowerShellで使用できる標準のコマンドレットの1つで、ファイルの内容を読み込んで、行ごとに処理するために使用されます。

Get-Contentの構文です。

Get-Content [-Path] <string[]> [-Filter <string>] [-Include <string[]>] [-Exclude <string[]>] [-ReadCount <Int64>] [-Delimiter <string>] [-TotalCount <Int64>] [-Tail <Int64>] [-Encoding <Encoding>] [-Force] [-Raw] [-Stream <string>] [-Credential <PSCredential>] [<CommonParameters>]

構文の各パラメータと内容です。


パラメータ 説明
-Path 読み込むファイルの場所を指定します。複数のファイルを指定することができます。
-Filter ファイルのフィルタリングに使用されます。指定された文字列と一致するファイルのみが読み込まれます。
-Include 読み込むファイルのリストを指定します。
-Exclude 除外するファイルのリストを指定します。
-ReadCount 読み込む行数を指定します。デフォルトでは、ファイル内のすべての行が読み込まれます。
-Delimiter ファイル内の列を区切るために使用される区切り文字を指定します。
-TotalCount ファイル内の行の総数を制限します。指定された数の行が読み込まれた後、Get-Contentコマンドレットは終了します。
-Tail ファイルの末尾から指定された行数を読み込みます。
-Encoding ファイルのエンコーディングを指定します。
-Force ファイルが読み取り専用であっても、読み込むことができるようにします。
-Raw 行末文字を無視してファイルを1つの文字列として読み込みます。
-Stream 読み込むストリームの名前を指定します。例えば、ファイル内の特定のストリームを読み込むことができます。
-Credential 認証情報を指定します。

Get-Content-Tailパラメータでtxtファイルの末尾の行を取得する

Get-Content-Tailパラメータでtxtファイルの末尾の行を取得してみましょう。

以下は、ファイルF:\test\list.txtの末尾3行を取得するサンプルコードです。

Get-Content F:\test\list.txt -Tail 3

list.txtの内容は以下の通りです。

商品A1
商品A2
商品A3
商品A4
商品A5
商品A6
商品A7
商品A8
商品A9
商品A10

結果です。

商品8
商品9
商品10

Get-Contentでcsvファイルの末尾の行を取得する

次にGet-Contentでtxtファイルの末尾の行を取得してみましょう。

以下は、ファイルF:\test\list.csvの末尾3行を取得するサンプルコードです。

Get-Content F:\test\list.csv | Select-Object -Last 3

Get-Contentコマンドレットを使用してCSVファイルの内容を取得し、Select-Objectコマンドレットを使用して、取得した行から最後の3行を選択します。

list.csvの内容は以下の通りです。

商品A1,100
商品A2,200
商品A3,300
商品A4,400
商品A5,500
商品A6,600
商品A7,700
商品A8,800
商品A9,900
商品A10,1000

結果です。

商品A8,800
商品A9,900
商品A10,1000

必要に応じて、Select-Objectコマンドレットを使用して、行から必要な列を選択することもできます。

まずは列項目を定義して一覧を出してみます。

Get-Content F:\test\list.csv | Select-Object -Last 10 | ConvertFrom-Csv -Header "商品","売り上げ" | Select-Object "商品","売り上げ"

結果です。

商品 売り上げ
---- --------
商品A1 100
商品A2 200
商品A3 300
商品A4 400
商品A5 500
商品A6 600
商品A7 700
商品A8 800
商品A9 900
商品A10 1000

次に2列目でかつ最終3行のみに絞り込んでみます。

 Get-Content F:\test\list.csv | ConvertFrom-Csv -Header "商品","売り上げ" | Select-Object "売り上げ" -Last 3

結果です。

売り上げ
--------
800
900
1000

Excelファイルを読み込み、末尾の行を取得する方法

Excelファイルの最終行を取得する方法

Excelファイルを読み込み、最終行を取得する方法については別の記事にまとめていますので、こちらをご参考ください。

PowerShellでExcelの最終行を取得する方法!

Excelファイルを読み込み、指定した列の末尾の3行を取得する

Excelファイルを読み込み、A列に絞り末尾の3行を取得するコードは以下の通りです。

$objExcel = New-Object -ComObject Excel.Application
$objWorkbook = $objExcel.Workbooks.Open('F:\test\list.xlsx')
$objWorksheet = $objWorkbook.Sheets.Item('Sheet1')
$intLastRow = $objWorksheet.Cells.SpecialCells(11).Row
$intStartRow = $intLastRow - 2
$data = @()
for ($i = $intStartRow; $i -le $intLastRow; $i++) {
    $objRange = $objWorksheet.Range("A$i")
    $data += $objRange.Value2
}
Write-Output $data

Excelファイルの構成は以下の通りです。

結果です。

商品A8
商品A9
商品A10

コードの説明

コードについて説明をします。

$objExcel = New-Object -ComObject Excel.Application
$objWorkbook = $objExcel.Workbooks.Open('F:\test\list.xlsx')

Excel.Applicationオブジェクトを作成しています。これは、Excelを自動化するためのオブジェクトであり、Excel.Applicationオブジェクトを作成することで、Excelの各種機能をPowerShellから利用できるようになります。

次にExcelファイルを開いています。ファイルのパスは’D:\test\フォルダ\対象ブック.xlsx’に指定されています。Excel.ApplicationオブジェクトのWorkbooksプロパティを使用して、対象のブックを開いて、オブジェクト変数$objWorkbookに格納しています。

$objWorksheet = $objWorkbook.Sheets.Item('Sheet1')

特定のワークシートを選択しています。Sheetsプロパティを使用して、対象のワークシートを取得し、Sheets.Item(‘Sheet1’)のように、ワークシート名で指定しています。選択したワークシートは、オブジェクト変数$objWorksheetに格納されます。

$intLastRow = $objWorksheet.Cells.SpecialCells(11).Row

選択されたワークシートの最終行を取得しています。CellsプロパティのSpecialCellsメソッドを使用して、最終行のセルを特定し、Rowプロパティを使用して、最終行の行番号を取得しています。この行番号は、整数値として、変数$intLastRowに格納されます。

$intStartRow = $intLastRow - 2

最終行から3行分のデータを取得するための開始行を計算しています。
最終行の行番号から2を引いた結果が、最終行から3行分のデータを取得するための開始行番号になります。

$data = @()

取得したデータを格納するための空の配列を作成しています。変数$dataには、後で取得したデータを追加していきます。

for ($i = $intStartRow; $i -le $intLastRow; $i++) {
$objRange = $objWorksheet.Range("A$i")
$data += $objRange.Value2
}
Write-Output $data

最終行から3行分のデータを1行ずつ取得しています。forループを使用して、最終行から開始行までの各行に対して処理を行っています。
forループが終わったら結果をコマンドラインへ出力します。

さいごに

いかがでしょうか。

今回は、

・PowerShellでtailコマンドを実現し、txt/csv/Excelファイルの末尾の行を取得する方法

についてまとめました。

また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。








コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です