2017-10-17 5 views
-2

에서 유사한 라인을 삭제 tbl.txt (150 만 라인)는, 같은 내장 :PowerShell을 : 파일을 고려 파일

 
    63 ; 193 ; 'Green' ; 'Color' 
152 ; 162 ; 'Tall' ; 'Size' 
230 ; 164 ; '130lbs' ; 'Weight' 
249 ; 175 ; 'Green' ; 'Color'  *duplicate on 'Value' and 'Attribute'* 
420 ; 178 ; '8'  ; 'Shoesize' 
438 ; 172 ; 'Tall' ; 'Size'  *duplicate on 'Value' and 'Attribute'* 

어떻게 내가 keept 수 있습니다

Num1 ; Num2 ; 'Value' ; 'Attribute'

그래서 tbl.txt처럼 보이는 첫 번째 고유 라인은 'Value'이고 'Attribute' 이며 중복 된 라인은에 삭제및 'Attribute'? 어떤 도움이 많이 감사합니다

 
    63 ; 193 ; 'Green' ; 'Color' 
152 ; 162 ; 'Tall' ; 'Size' 
230 ; 164 ; '130lbs' ; 'Weight' 
420 ; 178 ; '8'  ; 'Shoesize' 

: 같은

결과가 보일 것입니다.

+3

이, 어떻게 당신이 실패 해봤 한 무엇을? 이상적으로는 시도한 것에 대한 [MCVE]를 제공하고 오류 메시지 및/또는 잘못된 출력과 함께 실패한 방법에 대한 특정 정보를 포함해야합니다. SO는 코드 작성 서비스가 아닙니다. 가장 좋은 질문은 유용한 정보를 제공하여 답변하는 사람들이 자신의 정답을 고안하도록 안내 할 수있는 질문입니다. See [Ask]. –

+0

위의 검색 창을 사용하여 고유 한 값에 대한 기존 질문을 살펴보십시오. 올바른 방향으로 가리켜 야합니다. 이 같은 : [Powershell - 고유 값 필터링] (// stackoverflow.com/q/9825060) –

+0

처음에는'cat tbl.txt | 이에 따라 Get-Unique를 선택했지만 해결책을 찾지 못했습니다. @James 'Foreach-Object {$ _. 하위 문자열 (0,2)}'을 어떻게 돌릴 수 있는지 아직 알 수 없습니다. 선의 길이가 변하기 때문에 적절한 해결책으로 Select-Object -unique를 선택하십시오. – SamNorton

답변

0

Get-Content을 통해 텍스트 파일을 반복하고 문자열 조작을 통해 'Value' ; 'Attribute' 열을 분리 한 다음 해시 맵을 사용하여 이미 유사한 행을 처리했는지 확인하십시오. 그렇지 않은 경우 행을 한 번 출력하십시오. 코드에서 : 코멘트에 언급 한 바와 같이

$map = @{}; 
Get-Content tbl.txt | ` 
      %{ $key = $_.Substring($_.IndexOf(';',$_.IndexOf(';')+1)+1); ` 
       If(-not $map.ContainsKey($key)) { $_; $map[$key] = 1 } ` 
       } 

또는, 당신은 group을 사용할 수 있으며 선정시 그룹화와 같은 문자열을 적용하고, 마지막으로 각 그룹의 첫 번째 요소 취

Get-Content tbl.txt | group {$_.Substring($_.IndexOf(';',$_.IndexOf(';')+1)+1)} ` 
        | %{$_.Group[0]} 
1

한다고 가정을 데이터는 헤더없이 :

:

Import-CSV "C:\folder\data.txt" –Delimiter ";" -Header Num1,Num2,Value,Attribute | Sort-Object -Property Value -Unique 

원하는 출력을 제공합니다

Num1 Num2 Value  Attribute 
---- ---- -----  --------- 
230 164 '130lbs' 'Weight' 
420 178 '8'  'Shoesize' 
63 193 'Green' 'Color' 
152 162 'Tall' 'Size' 

당신은 당신의 결과로 내보내기 - CSV를 사용할 수 있습니다 : 당신이 시도 무엇

Import-CSV "C:\folder\data.txt" –Delimiter ";" -Header Num1,Num2,Value,Attribute | Sort-Object -Property Value -Unique | Export-CSV "C:\folder\data2.txt" –Delimiter ";" -NoTypeInformation