문제

내가 있는 파일에 다음과 같습니다:
1
b2
c,3
a,4
b5
c,6
(...반복 1,000 라인)

할 수 있는 방법을 바꾸어 그으로 이?
a,b,c
1,2,3
4,5,6

감사

도움이 되었습니까?

해결책

여기에 brute-force one-liner 지옥에서 그것을 할 것입니다:

PS> Get-Content foo.txt | 
      Foreach -Begin {$names=@();$values=@();$hdr=$false;$OFS=',';
                      function output { if (!$hdr) {"$names"; $global:hdr=$true}
                                        "$values";
                                        $global:names=@();$global:values=@()}} 
              -Process {$n,$v = $_ -split ',';
                        if ($names -contains $n) {output};
                        $names+=$n; $values+=$v } 
              -End {output}
a,b,c
1,2,3
4,5,6

아시아 하지만 당신을 얻어야 한다.이해야 복사/붙여 넣기로 올바르게 됩니다.그러나는 경우를 포맷하는 것은 위와 같이 당신이 필요합니다 다시 넣-틱 후에 곱슬에 시작하고 프로세스 scriptblocks.이 스크립트가 필요합 PowerShell2.0 를 사용하므로 새로운 분할 연산자입니다.

이 방법을 많이 사용합니다 Foreach-체합니다.일반적으로 사용할 때 Foreach-체(별칭을 Foreach)파이프라인에서 지정하는 단 하나의 스크립트 블록처럼 그렇:

Get-Process | Foreach {$_.HandleCount}

인쇄하는 밖으로 처리 계산에 대한 각 프로세스.이용 Foreach-객체를 사용하여 프로세스 script 블록 암시적으로 의미하는 그것을 실행하면 각 개체에서 받은 파이프 라인에 있습니다.지금 무엇을 하려면 우리가 총는 모든 손잡이 각 프로세스에 대해?는 사실을 무시할 수 있습 사용 Measure-Object HandleCount -Sum 이렇게 하는 방법에 대해 알아보겠습니다 Foreach-체 이것을 할 수 있습니다.당신이 볼로서 원래 이 문제에 대한 해결책,Foreach 수 있습을 모두 스크립트 블록의 시작 실행되는 한 번에 대한 첫 번째 파이프라인의 개체와 최종 scripblock 실행하는 더 이상이 없을 때체에서 파이프 라인에 있습니다.할 수 있는 방법은 다음과 같습니다 총 손잡이를 사용하여 계산 Foreach-체:

gps | Foreach -Begin {$sum=0} -Process {$sum += $_.HandleCount } -End {$sum}

에 관한 이 다시 문제 해결 방법에서 시작 스크립트 블록의 내가 초기화 일부를 저장할 변수의 배열 이름과 값을 뿐만 아니라 bool($hdr)는 말할지 여부를 헤더가 출력되었다(우리만을 출력하려는 그것을 한번).다음 약간 마음 부은 것은 내가 또한 함수를 선언(출력)에서 시작하는 스크립트 블록 나가 모두에서 프로세스와 최종 scriptblocks 을 출력하는 현재의 설정에 저장된 데이터는$의 이름과$값입니다.

다른 속이는 프로세스가 스크립트 블록의 사용을 포함하고자하시는 경우 현재 라인의 필드의 이름을 이미 수 있습니다.그렇다면,다음 출력하는 현재의 이름과 값을 재설정 그 배열이 비어 있습니다.그렇지 않으면 그냥 숨기름과 가치의 적절한 배열 그래서 그들은 나중에 저장할 수 있습니다.

BTW 이유는 출력 기능을 사용할 필요가 전역:지정에서 변수는 PowerShell 수행하"cow"접근할 때 중첩된 범위 수정하는 변수에 정의 밖에 그것의 범위가 있습니다.그러나 우리가 정말 원하는 수정에서 발생하는 더 높은 범위,우리에게 말해야 PowerShell 사용하여 그 수정처럼 전역:또는 스크립트:.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top