2013-12-13 4 views
1

CSV 파일을 가져오고 파이프 구분 형식으로 열을 추출하려고합니다. 내가 명시 적으로 열을 전달하고 경우에이 위대한 작품을Powershell에서 ForEach에 문자열 전달

Import-csv file.dat | foreach {($_.'Column1')+ "|" +($_.'Column2')+ "|" +($_.'Column3')} 

내가 foreach는 구성 요소에 동적으로 생성 된 변수의 문자열을 전달하려는

($_.'ColumnX' + "|" $_.'ColumnY') etc. 

값.

나는, 파워 쉘은 하나의 컬럼으로 문자열을 생성하고 첫 번째 열을 출력하는 것이 치료 정확하게 그러나

"($_.'Column1')+ "|" +($_.'Column2')+ "|" +($_.'Column3')" 

으로 보이는 "문자열"을 생성 할 수 있어요.

예 :

$columns = ($_.'Column1')+ "|" +($_.'Column2')+ "|" +($_.'Column3') 
Import-csv file.dat | foreach {$columns} 

정확한 출력을 얻으려면 foreach 섹션에서 전달 된 열 문자열을 얻는 방법에 대한 조언을 구하십시오.

+0

쉼표를 파이프로 변환하려고합니까? '-replace'를 쓰지 않는 이유는 무엇입니까? –

답변

2

이 기능이 유용합니까?

Import-csv file.dat | ConvertTo-Csv -Delimiter '|' -NoTypeInformation 
+0

대단하군요. 그것은 확실히 작동합니다! 그러나 foreach 그룹에 동적 변수를 추가하는 방법을 알아 내려고 2 일 이상을 보냈습니다. 문자열을 동적 변수로 전달할 수있는 방법을 알고 싶습니다. – DataRiver

+0

속성 이름 배열 (열 머리글)을 전달하고 싶습니까? – mjolinor

0

정확하게 이해하면 CSV (쉼표로 구분 된 값) 파일을 읽고이를 세로 막대 "|"로 출력하려고합니다. 분리 된 파일. 이 경우, 다음을 수행 할 수 있습니다

gc file.dat | % {[string]::join("|", $_.split(','))} 

이 단지 라인을 읽고 각 쉼표에 필드로 분할 및 수직 막대를 결합한다. @의 MJOLNIR의 대답에 귀하의 코멘트에 따라

, 여기에 foreach는 블록 내에서 동적 필드 이름을 사용하는 방법입니다 :

$f1 = "ColumnA" 
$f2 = "ColumnB" 
import-csv file.dat | % {$_.$($f1) + "|" + $_.$($f1)} 

는 설명 내 대답 here을 참조하십시오.

+0

예, 그 계획과 @ mjolinor의 솔루션도 잘 작동합니다. 하지만 foreach 나 다른 어떤 것에 문자열을 동적 매개 변수로 전달하는 방법을 알고 싶습니다. Thanks – DataRiver

+0

'$()'는 PS에게 괄호 안의 표현식을 먼저 평가하도록 지시합니다. 따라서 foreach 블록은'{$ _. ColumnA + "|" + $ _. ColumnB}' – bouvierr

관련 문제