2017-03-01 10 views
0

次は、回答が得られたprevious questionの連続です。列の値が一致する既存のcsvに新しく生成されたハッシュテーブルを追加

オリジナルCSVは、以下の値を有する:

URL,Groups,contact,number 
test1.org,TestGroup,Ax;Bx;Cx,555 
test2.org,TestGroup,Ax;Bx;Cx,555 
Test3.com,TestGroup,Ax;Bx;Cx,555 
Check.com,CheckGroup,Rx;Tx,333 
Random.1.com,RandomGroup,Gy;Fy;Hy,999 
random.22.org,RandomGroup,Gy;Fy;Hy,999

誰かが寛大Groupsことによって、これをグループ化されたハッシュテーブルを生成し、コンマ(,)で区切られた1つに各グループのすべてのURLを設定するためのコードを提供する助け。

コードはでした:

  1. をどのように私は、グループ内の最後の値のセミコロン(;)を削除しますか:私は2つの物事が答え

    $data = Import-Csv 'path' 
    $hashtable = @{} 
    foreach ($item in $data) { 
        $hashtable[$($item.Groups)] += "$($item.URL); " 
    } 
    

    必要がありますか?

  2. この新しいハッシュテーブルを元のCSVに戻すにはどうすればよいですか?

ロジックの考え方は、オリジナルであり、ハッシュテーブルのそれと一致するグループ名ごとに、URLフィールドにハッシュテーブルの値を挿入します。そんな感じ。

期待最終結果は(注文)のようなものでなければなりません。その後、グループごとにURLフィールドを拡大し、セミコロンで結果の配列に参加し、Groupsフィールドで

Groups,URL,contact,number 
TestGroup,test1.org;test2.org;Test3.com,Ax;Bx;Cx,555 
CheckGroup,Check.com,Rx;Tx,333 
RandomGroup,Random.1.com;random.22.org,Gy;Fy;Hy,999
+0

同じ 'Groups'値の後に常に同じ' contact'と 'number'値が続きますか? –

+0

元のcsvで何が起こるか、このcsv outを吐き出したレポートは、グループの別々の行にURLを生成しました。連絡先と番号が結ばれているグループが表示されている理由は、URLが別々の行に吐き出されたために重複しています。 – ace23

答えて

1

グループ$data

$data | Group-Object Groups | ForEach-Object { 
    $hashtable[$_.Name] = @($_.Group | Select-Object -Expand URL) -join ';' 
} 

元のデータからURLフィールドを削除し、固有のレコードを選択し、グループ化されたURLを再度追加します。

$data | Select-Object -Property * -Exclude URL | 
    Select-Object -Unique * | 
    Select-Object *,@{n='URL';e={$hashtable[$_.Groups]}} 
+0

私のコメントを撤回したのは、新しいテーブルを呼び出すために割り当てられた変数だけでした。 – ace23

+0

質問:元のデータがハッシュテーブルのデータと一致するようにソートされていると仮定していますか?グループ化されたURLを追加する前に、ハッシュテーブルの名前が元のグループの名前と一致するように何かを追加できますか? – ace23

+1

ハッシュテーブルルックアップ '$ hashtable [$ _。Groups]'はどうしますか? –

関連する問題