2017-03-01 8 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하여 그룹화 해시 테이블을 생성 및 콤마 (,)에 의해 분리 된 하나에 각각의 그룹의 모든 URL을 설정하는 코드를 제공 도왔다.

코드이었다

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

나는 두 가지 대답이 필요합니다

  1. 어떻게 그룹의 마지막 값을 세미콜론 (;)를 제거 할 수 있습니까?
  2. 이 새로운 해시 테이블을 원래의 CSV로 다시 가져 오는 방법은 무엇입니까?

논리 임 생각는 원본과 해시 테이블의 URL 필드에 해시 테이블의 값을 삽입하는 것이 일치하는 각 그룹 이름을 Sort -Unique입니다. 그런 것.

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

동일한 '그룹'값은 항상 동일한 '연락처'와 '숫자'값을 따릅니 까? –

+0

원래 csv에서 어떤 일이 벌어 지는지,이 csv 출력을 울리는 보고서는 그룹의 개별 줄에 URL을 생성했습니다. 연락처와 전화 번호가 묶인 그룹이 보이는 이유는 이제 URL이 별도의 줄에 나뉘어 복제되기 때문입니다. – ace23

답변

1

그룹 $dataGroups 필드에 의해, 각 그룹에 대한 URL 필드를 확장 세미콜론 결과 배열에 가입 :

$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]'은 어떻게 생각하십니까? –