0

CSV ファイルに含まれる数千の URL のリストがあります。それらは、フォルダー、変数などを含む完全な長さです。さらに分析するために、ドメインのリストを作成したいと思います。この関連する SO スレッドを見つけましたが、Powershell は初めてで、CSV の行でこれを反復する方法がわかりません。

私の CSV には列が 1 つしかありません。

http://something.net/prod/case_studies.asp
http://www.another.com/prod/group/gold/price_guarantee.asp
http://www.goodsite.co.uk/prod/case.asp?utm_source=google&utm_medium=search
http://wheel.net/prod/studious.asp
http://www.buystrop.com/gap/index.php?page_id=2345&group_id=9876

これが私が終わらせたいものです:

something.net
www.another.com
www.goodsite.co.uk
wheel.net
www.buystrop.com

他のスレッドで見つけたコードを何度か繰り返してみましたが、まだ何も機能していません。エラーが発生するか、出力が空白になります。

編集: これまでに試したコードは次のとおりです。

$file = Get-Content 'file.csv'
$domains = ForEach ($p in $file) {select ([System.Uri]$p).Host}

エラーは発生しません。コードは実行されますが、$domains は空です。

$domains = ForEach-Object {$file | select-object [System.Uri]$file.Host}
$domains = ForEach-Object [System.Uri]$file.Host

これらは両方とも、各行をループするのではなく、ファイル全体を見ていることを示すエラーを返します。これらについて数十のバリエーションを試しましたが、各行の URL をどのように解析するかはまだわかりません。

4

2 に答える 2

3

alroc が示したものに基づいて構築された回答を次に示しますが、ホストのリストを一意にすることを追加します。

$domains = (gc file.csv)|%{(New-Object System.Uri $_).Host)|select -unique

これを分解する:

  • $domains一意のホストのリストを含む変数です
  • gcGet-Content のエイリアスです - ファイルを 1 行ずつ読み込みます
  • (パイプ)文字は|各行を読み取りgc、次の式に渡します
  • %ForEach-Object のエイリアスであり$_、それぞれがパイプラインに沿って渡される現在の値を保持する特別な変数です (この場合、file.csv からの 1 行のテキスト)。
  • New-Objectfile.csv からの URL を使用して、 Uriクラスの新しいインスタンスを作成します。
  • かっこ()は新しいオブジェクトをラップし、プロパティ逆参照演算子を使用して Uri オブジェクトのHost.プロパティにアクセスできるようにします。MSDN のドキュメントによると、このプロパティには、呼び出した URL の「ドメイン」部分のみが含まれています。
  • 次に、結果のホストがselectコマンドレット (Select-Object のエイリアス) にパイプされます。コマンドレットには、ご想像のとおり-unique、通過する値をフィルターして一意の値または個別の値にするスイッチがあります。

これが役立つことを願っています!

于 2013-09-25T03:00:20.297 に答える