新規記事の投稿を行うことで、非表示にすることが可能です。
2020年09月12日
"シェル芸" ~ 大量のテキストファイルの行数を一発でカウントする方法 ~ 【Windows PowerShell編】
【 はじめに 】
こんにちは。田中パスタです。
このブログは、就職氷河期世代の量産型プログラマである私(ワタクシ)が、ブログ・アフィリエイト・SEOについての見識を深めるべく個人的に利用させて頂く実験部屋でございます。
![]() |
今回は、Windows10に標準搭載のPowerShellで実行可能な、前回と同じ処理を行うコマンドレットをご紹介します。
もちろん、しっかり"シェル芸"のルールを守っていきますよ~。それではいってみましょう!
【目次】
【 "シェル芸"のルールをおさらい 】
当ブログにおける"シェル芸"のルールをおさらいします。
- PowerShell画面で、コマンド入力一発で目的の処理を完結させる
- 1行のコマンド、1回の実行で全てを終わらせる
- アプリケーションソフトなどの外部ツールは利用しない
- バッチファイルも作らない
【 PowerShellとは 】
”PowerShell”とは、一言でいうとコマンドプロンプトをよりパワフルにしたものです。
![]() | 【PowerShellのロゴ】 Microsoft - Extracted from the PowerShell Core 6.0.0 for Windows. |
引用:PowerShell(パワーシェル)は、マイクロソフトが開発した拡張可能なコマンドラインインターフェイス (CLI) シェルおよびスクリプト言語である。
PowerShell - フリー百科事典『ウィキペディア(Wikipedia)』
コマンドプロンプトでは実現が難しかった複雑な処理を簡単に実行することができます。
Windows7でバージョン2が標準搭載され、Windows10ではバージョン5が標準搭載されています。
下記のサイトにてPowerShellがどういったものなのか、詳しく解説されています。
参考:PowerShell(パワーシェル)は何ができるの?メリット、使い方、実例まで - 2020.4.1
パソコン(PC)通販のドスパラ
基本的な操作方法はコマンドプロンプトと大きく違いはありませんが、入力できるコマンドの種類は大幅に増えています。
PowerShellの使い方については、下記のサイトで詳しく説明されています。
参考:PowerShell 使い方メモ - 2020.07.29
Qiita - @opengl-8080
PowerShellでは、コマンドのことを”コマンドレット”という呼び方をします。
コマンドレットは、コマンドに比べて機能が直感的に分かりやすい名前であることが特徴の一つです。
【 コマンドレットの機能説明 】
1つのフォルダを指定して、その中、及びサブフォルダの中にある全てのテキストファイル(※拡張子が.txtのファイル)の行数をカウントして画面に結果を出力します。
出力結果は 『 [フルパスのファイル名] , [行数] <改行> 』 のようにして、カンマ区切りのCSV形式で一覧表示します。
【 コマンドレットの実行結果 】
例えば次のようにテキストファイルが6つ存在するとき、
C:\Temp
│ aaa.txt
│ bbb.txt
│ ccc.txt
│
└─ddd
eee.txt
fff.txt
ggg.txt
コマンドの実行結果はこうなります。
c:\Temp\aaa.txt,5
c:\Temp\bbb.txt,8
c:\Temp\ccc.txt,4
c:\Temp\ddd\eee.txt,9
c:\Temp\ddd\fff.txt,6
c:\Temp\ddd\ggg.txt,13
【 コマンドレットの動作環境 】
Windows10のPowerShell
※バージョン5で動作確認しました。(詳細バージョン:5.1.18362.752)
※バージョンの確認方法は、PowerShell画面にて「$PSVersionTable」のコマンドレットを実行すると画面に表示されます。
※ちなみに、Windows7に標準搭載のPowerShellでは、バージョンが古くて正しく実行できませんでした。
【 コマンドレットの使い方 】
① [スタートボタン] → [Windows PowerShell] → [Windows PowerShell] を選択する。
② 下記の一発コマンドレットの "c:\ほげほげ" の部分に、あなたが調べたいフォルダ名をフルパスで入力する。
③ コマンドレットを実行する。(エンターキー ッターン!!)
※当ブログに掲載のコマンドレットを実行される場合はあくまで自己責任でお願い致します。
【 一発コマンドレット 】
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
get-childitem -file -recurse "C:\ほげほげ" -filter "*.txt" | Foreach-Object { $_.FullName + "," + (Get-Content $_.FullName | Measure-Object -Line).Lines } |
※【補足】テキストファイルの最終行が改行のみの空行だった場合は、最終行をカウントに入れません。
【 出力結果をファイルに保存する場合はこちら 】
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
get-childitem -file -recurse "C:\ほげほげ" -filter "*.txt" | Foreach-Object { $_.FullName + "," + (Get-Content $_.FullName | Measure-Object -Line).Lines } | Out-File "C:\ほげほげ\結果.csv" -Encoding default |
※【補足】"c:\ほげほげ\結果.csv"には、出力したいファイル名のフルパスを入力してください。
【 コマンドレットの解説 】
「get-childitem」は、フォルダ"C:\ほげほげ"の中に存在するファイルやフォルダの情報を一括して取得します。
「-file」のオプションを付けることによってファイルのみを対象とし、フォルダは対象外となります。
「-recurse」のオプションを付けることによって、サブフォルダにあるファイルも対象にします。
「-filter "*.txt" 」のオプションを付けることによって、テキストファイルのみを対象にします。
「 | (パイプ)」は、取得したテキストファイルの情報を、パイプ以降に記載されたコマンドに渡します。
「Foreach-Object { ~ }」の部分は、取得したテキストファイルの数だけ、{ ~ } の中のコマンドを繰り返し実行します。
「$_.FullName」の部分は、画面に一つのテキストファイルのフルパスを表示します。
「(Get-Content $_.FullName | Measure-Object -Line).Lines」の部分は、一つのテキストファイルの行数を数えて、その行数のみを画面に表示します。
「Out-File "C:\ほげほげ\結果.csv"」の部分は、出力結果を「結果.csv」のファイル名で指定されたディレクトリに保存します。
「-Encoding default」のオプションは、出力結果の文字化けを防ぐために使用しています。
【 さいごに 】
今後も便利そうな”シェル芸”を思いついたら当ブログに掲載していきたいと思います。
そうそう、ツイッターでは今現在も続々と"シェル芸人"の方々が面白いコマンドを呟いていますので、興味のある方はハッシュタグ #シェル芸 で検索してみてくださいね。
最後までご覧いただき、ありがとうございました。
※この情報は2020年9月13日時点のものです。
※間違いや、もっと良い案がありましたらコメントに記載をお願いいたします。
※当ブログに掲載された内容によって生じた損害等の一切の責任を負いません。
私が契約しているレンタルサーバーは“エックスサーバー“です。

タグ:シェル芸