質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.86%

  • PowerShell

    299questions

    Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

Powershellで特定のパーセンテージ以下の情報を出力したい

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 134

SUSU0703

score 7

こんにちは。

CSVのPCリストの中からパーセンテージが10%以下のものだけを抽出して別CSVファイルに出力したいと思っています。

例えばこのようなCSVファイルがあったとして(PCList.csv)
Hostname % Free
PC_aaaa    0%
PC_bbbb    1%
PC_cccc    2%
PC_dddd    3%
PC_eeee    4%
PC_ffff    5%
PC_gggg    6%
PC_hhhh    7%
PC_iiii    8%
PC_jjjj    9%
PC_kkkk    10%
PC_llll    11%
PC_mmmm    12%
PC_nnnn    13%
PC_oooo    14%
PC_pppp    15%

そこから10%以下のものだけを抽出して別ファイル(FilterResult.csv)にしたいのですが、以下のようにすると

import-csv "./PCList.csv" | where {$_.'% Free' -lt '10%'} | Export-Csv "./FilterResult.csv" -NoTypeInformation

0%と1%のものしか出力されません。これはどうすれば10%以下の分だけ抽出出来ますでしょうか。宜しくお願い致します。
Hostname % Free
PC_aaaa    0%
PC_bbbb    1%

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

こんにちは。

'% Free'で取得できる値は"10%"と数値ではなく文字列であるため、数値の大小より文字数の大小が優先して比較対象となってしまい質問の様な結果になってしまいます。  

例えば

Import-Csv .\PCList.csv -Delimiter "`t" | where { [int]($_.'% Free'.Replace('%','')) -lt 10}

の様に'% Free'の値をint型に変換して比較すると上手く動作します。 
(ただし、この例ではエラー処理がかなりおざなりですので、実データに対してはもう少しきちんとした処理を実装してください。)

PS C:\> Import-Csv .\PCList.csv -Delimiter "`t" | where { [int]($_.'% Free'.Replace('%','')) -lt 10}

Hostname % Free
-------- ------
PC_aaaa  0%
PC_bbbb  1%
PC_cccc  2%
PC_dddd  3%
PC_eeee  4%
PC_ffff  5%
PC_gggg  6%
PC_hhhh  7%
PC_iiii  8%
PC_jjjj  9%

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/25 15:39

    stknohgさん、早速ありがとうございます!

    そのままコピペして試してみたのですが、以下のようなエラーが出てしまいました。

    PS C:\Powershell> Import-Csv .\PCList.csv -Delimiter "`t" | where { [int]($_.'% Free'.Replace('%','')) -lt 10}
    You cannot call a method on a null-valued expression.
    At line:1 char:51
    + ... -Delimiter "`t" | where { [int]($_.'% Free'.Replace('%','')) -lt 10}
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

    パイプラインの前の部分を実行するとちゃんと出力されています。こちらのエラーお分かりになりますでしょうか。どうぞよろしくお願いいたします。
    PS C:\Powershell> Import-Csv .\PCList.csv -Delimiter "`t"

    Hostname,% Free
    ---------------
    PC_aaaa,0%
    PC_bbbb,1%
    PC_cccc,2%
    PC_dddd,3%
    PC_eeee,4%
    PC_ffff,5%
    PC_gggg,6%
    PC_hhhh,7%
    PC_iiii,8%
    PC_jjjj,9%
    PC_kkkk,10%
    PC_llll,11%
    PC_mmmm,12%
    PC_nnnn,13%
    PC_oooo,14%
    PC_pppp,15%

    キャンセル

  • 2018/05/25 15:42

    -Delimiter "`t"

    の部分は無しで実行してください。
    質問文を見るとCSVファイルのカンマが消失しており、タブ区切りに見えたので私の環境ではタブ区切りで試してたんですよね。

    キャンセル

  • 2018/05/25 15:52

    出来ましたーー! 素晴らしい、大変助かりました。ありがとうございます!!!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.86%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 受付中

    rubyで配列をcsvに格納する際、1要素ごとに改行する方法

    かなり初歩的な質問で申し訳有りません。 質問させて頂きます。 現在、スクレイピングしたデータをcsvに書き出すプログラムを作成しております。 データは5個づつ取得され、そのデータ

  • 受付中

    大量データ処理について

    ショッピングサイトのエンジニアをやってます。 以下質問がございます。 ①月の受注データ(10万件ほど)をselectして、 ②別に読み込んだcsvファイルのデータと1件ずつ突合チ

  • 受付中

    独自ドメインの同一サーバー内での別ディレクトリへの切り替え

    独自ドメインの同一サーバー内での別ディレクトリへの切り替えに関してご質問です。 現在「aaaa」というディレクトリを読み込み 「http://testtest.com」という独自

  • 解決済

    絶対URLから相対URLに変換する処理(PHP)

    絶対URLから相対URLに変換してくれるようなメソッドを作りたいです。 <ul>   <li><a href="http://example.com/hoge1/index.htm

  • 受付中

    Ruby csvについて

    配列の内容をCSVで保存するときの質問です。 ・配列内に含まれている[nil]をどうにかして[ ]or[×]にして保存したいと思っているのですがいまいちやりかたがわかりません。

  • 解決済

    PHP全般 変数の展開などについて

    PHPの文字列の操作について、教えていただきたいです。 例えば以下のようなダブルクオートや各種記号などが入った文字列をそのままの状態でfile_get_contentsの一部で利

  • 解決済

    sedコマンド・・・

    便利ツールを作るために sedコマンドで sed.textファイルの中の文字列aaaaを自サーバのホストネームにするにはどうしたらいいでしょうか。 sed -e 's/

  • 解決済

    ワードプレスでNAVのタグID/CLASS/SPANが吐き出されないのでCSSがあたりません!

    前提・実現したいこと はじめまして。ワードプレスの質問になります。 かれこれ丸一日時間を取られております。 どうぞお助け願います。 一度「Aというサイト」にオリジナルで作成

同じタグがついた質問を見る

  • PowerShell

    299questions

    Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。