アフィリエイト広告を利用しています

広告

この広告は30日以上更新がないブログに表示されております。
新規記事の投稿を行うことで、非表示にすることが可能です。
posted by fanblog

2020年09月05日

"シェル芸" 〜 大量のテキストファイルの行数を一発でカウントする方法 〜 【Windows コマンドプロンプト編】

【 はじめに 】

こんにちは。田中パスタです。

このブログは、就職氷河期世代の量産型プログラマである私(ワタクシ)が、ブログ・アフィリエイト・SEOについての見識を深めるべく個人的に利用させて頂く実験部屋でございます。

character_program_fast.png
皆様、”シェル芸”という言葉をご存知でしょうか。

”シェル芸”とは、主にLinuxなどのUNIX系OS上で、あらゆる処理をコマンド入力一発で華麗に終わらせる芸当のこと、そしてその技を繰り出す人々のことを”シェル芸人”と呼ぶのだそうです。

まさにCUI界の”ワンパンマン”と言ったところでしょうか。

参考:シェル芸 - フリー百科事典『ウィキペディア(Wikipedia)』
参考:CUI(キャラクタユーザインタフェース) - フリー百科事典『ウィキペディア(Wikipedia)』



OSをWindows に置き換えてみると、次のようなことが言えそうです。
  1. コマンドプロンプト画面で、コマンド入力一発で目的の処理を完結させる
  2. 1行のコマンド、1回の実行で全てを終わらせる
  3. アプリケーションソフトなどの外部ツールは利用しない
  4. バッチファイルも作らない


私(ワタクシ)もプログラマのはしくれ、ちょっとこれに挑戦してみたいと思います。なお、当ブログに掲載のコマンドを実行される場合はあくまで自己責任でお願い致します。



【 大量のテキストファイルの行数を一発でカウントする 】


【目次】
  1. コマンドの機能説明
  2. コマンドの実行結果
  3. コマンドの実行環境
  4. コマンドの使い方
  5. 一発コマンド
  6. 出力結果をファイルに保存する場合はこちら
  7. コマンドの解説


【 コマンドの機能説明 】

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のコマンドプロンプト


【 コマンドの使い方 】

@ [スタートボタン] → [Windows システムツール] → [コマンドプロンプト] を選択して、コマンドプロンプト画面を起動する。

A 下記の一発コマンドの "c:\ほげほげ" の部分に、あなたが調べたいフォルダ名をフルパスで入力する。

B コマンドを実行する。(エンターキー ッターン!!)



【 一発コマンド 】

【GitHubGist】

※【補足】テキストファイルの最終行が改行のみの空行だった場合は、最終行をカウントに入れません。


【 出力結果をファイルに保存する場合はこちら 】

【GitHubGist】

※【補足】"c:\ほげほげ\結果.csv"には、出力したいファイル名のフルパスを入力してください。



【 コマンドの解説 】

コマンドの先頭と末尾の部分、pushdpopdは、カレントディレクトリをコマンドを実行している間だけ一時的に移動させるために使用しています。なので以下のコマンドを実行しても結果は同じです。

【GitHubGist】


もっとシンプルなコマンドが良い方は、下記のようなコマンドでもだいたい目的を達成しますが、余計な線や改行が入ったり、ファイルパスが全部大文字になったりします。

【GitHubGist】

---------- 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


@set /p <NUL=%f」の部分はファイルのフルパスを出力する部分です。これを「echo」に置き換えるとシンプルなのですが、それだと出力結果に余計な改行が入ってしまいます。

【GitHubGist】

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



【ざっくり解説 ※めんどくさかったら読み飛ばしてね。

for /r %f in ("*.txt") do」の部分は、存在するテキストファイルの数だけ、その後に記載されたコマンドを繰り返します。

/r」のオプションを付けることによって、サブフォルダにあるテキストファイルも対象にします。

%f」の部分は、do 以降に記載されたコマンドに対してフルパスの情報を変数「%f」に格納して渡します。

なのでdo の後に「@echo %f 」などと記載すると、テキストファイルのフルパスを画面に出力します。

でも実際にはechoを使用すると出力結果に余計な改行が入ってしまうので、ちょっと複雑になっちゃいますが「@set /p <NUL=%f」で代用しています。

尚、「@」は入力されたコマンドそのものを画面に表示しないようにするために使用します。邪魔ですからね。

また「&」は複数のコマンドを順番に実行する場合に使用します。

find /v /c "" < "%f"」の部分は、一つのテキストファイルの行数を数えて、その行数のみを画面に表示します。



【 さいごに 】

次回はWindows 10に標準搭載の「PowerShell」を使って、今日と同じ処理を一発コマンドで実現してみたいと思います。

最後までご覧いただき、ありがとうございました。

※この情報は2020年9月4日時点のものです。
※間違いや、もっと良い案がありましたらコメントに記載をお願いいたします。
※当ブログに掲載された内容によって生じた損害等の一切の責任を負いません。


私が契約しているレンタルサーバーは“エックスサーバー“です。


タグ:シェル芸
バナー広告(月額990円(税抜)から、高速・多機能・高安定レンタルサーバー『エックスサーバー』)

私が契約しているレンタルサーバーは ”エックスサーバー” です。おススメですよ

Xserver
wpX Speed
Xdomain
ロリポップ!
お名前.com Z.com WP ムームードメイン
レイコップ公式オンラインストア

ファン
最新記事
カテゴリーアーカイブ
検索
プロフィールと免責事項
田中パスタさんの画像
田中パスタ
ソフトウェア開発会社のSE兼プログラマとして2x年。思考停止で立派に社畜としての本分をまっとうして参りましたが、もう少しクリエイティブな世界を覗いてみたく思い立ち、実験的にこのブログを利用させていただきます。
プロフィールと免責事項

最新コメント
バナー広告( 格安ドメイン名取得サービス『エックスドメイン』)

初心者の私でもスムーズにドメイン取得できました


月別アーカイブ
<< 2020年09月 >>
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30      
タグクラウド


バナー広告( ドメイン取るなら『お名前.com』)

取得できるドメイン名を適当に検索してみるだけでも結構楽しいですよ






バナー広告( ふとんクリーナーの『レイコップ』)





×

この広告は30日以上新しい記事の更新がないブログに表示されております。