programing

CSV 윈도우즈 PowerShell에 열 추가

muds 2023. 8. 19. 10:55
반응형

CSV 윈도우즈 PowerShell에 열 추가

헤더가 있는 표준 csv 파일이 있습니다. 새 열을 추가하고 모든 행을 동일한 데이터로 설정합니다.

원본:

column1, column2
1,b
2,c
3,5

끝나고

column1, column2, column3
1,b, setvalue
2,c, setvalue
3,5, setvalue

누군가가 저에게 좋은 방향을 알려줄 수 있다면 저는 이것에 대해 아무것도 찾을 수 없습니다.파워셸은 처음이라 죄송합니다.

계산된 속성을 사용하는 한 가지 방법은 다음과 같습니다.

Import-Csv file.csv | 
Select-Object *,@{Name='column3';Expression={'setvalue'}} | 
Export-Csv file.csv -NoTypeInformation

계산된 속성에 대한 자세한 내용은 http://technet.microsoft.com/en-us/library/ff730948.aspx 에서 확인할 수 있습니다.

간단히 말해서, 당신은 파일을 가져오고, 내용을 파이프로 연결합니다.Select-Objectcmdlet에서 모든 기존 속성(예: '*')을 선택한 후 새 속성을 추가합니다.

셰이 레비의 대답은 저에게도 효과가 있습니다!

각 개체에 대한 값을 제공하지 않으려는 경우 코드가 훨씬 쉬워집니다.

Import-Csv file.csv | 
Select-Object *,"column3" | 
Export-Csv file.csv -NoTypeInformation

제가 본 스크립트 중 동적인 것은 없기 때문에 범위와 사용할 수 있는 작업이 상당히 제한되어 있습니다.그것은 아마도 대부분의 PS 사용자들과 심지어 파워 사용자들이 프로그래머가 아니기 때문일 것입니다.Powershell에서 어레이를 사용하는 경우는 거의 없습니다.저는 셰이 레비의 대답을 듣고 개선했습니다.

참고:가져오기는 일관성이 있어야 하지만(예: 두 개의 열) 열을 동적으로 카운트하고 헤더를 생성하도록 이를 수정하는 것은 매우 쉽습니다.이 특정한 질문에 대해서는, 그것은 질문되지 않았습니다.또는 필요한 경우가 아니면 헤더를 생성하지 마십시오.

아래에서 폴더에 있는 CSV 파일을 최대한 많이 가져와서 헤더를 추가한 다음 나중에 제거할 것임은 두말할 필요도 없습니다.데이터의 일관성을 위해 헤더를 추가하는 이유는 나중에 행 아래로 열을 상당히 직선으로 조작할 수 있도록 하기 때문입니다(선택한 경우).당신은 이것을 당신의 심장 콘텐츠로 수정할 수 있으며, 다른 용도로도 자유롭게 사용할 수 있습니다.이것은 일반적으로 제가 파워셸에 필요로 하는 모든 것에 대해 고수하는 형식입니다.카운터를 사용하면 기본적으로 개별 파일을 조작할 수 있으므로 여기에는 많은 가능성이 있습니다.

$chargeFiles = 'C:\YOURFOLDER\BLAHBLAH\'
$existingReturns = Get-ChildItem $chargeFiles

for ($i = 0; $i -lt $existingReturns.count; $i++)
{ 

$CSV = Import-Csv -Path $existingReturns[$i].FullName -Header Header1,Header2
$csv | select *, @{Name='Header3';Expression={'Header3 Static'}}
     | select *, @{Name='Header4';Expression={'Header4 Static Tet'}}
     | select *, @{Name='Header5';Expression={'Header5 Static Text'}}|
CONVERTTO-CSV -DELIMITER "," -NoTypeInformation |
SELECT-OBJECT -SKIP 1 | % {$_ -replace '"', ""} | 
OUT-FILE -FilePath $existingReturns[$i].FullName -FORCE -ENCODING ASCII

}

사용할 수도 있습니다.Add-Member:

$csv = Import-Csv 'input.csv'

foreach ($row in $csv)
{
    $row | Add-Member -NotePropertyName 'MyNewColumn' -NotePropertyValue 'MyNewValue'
}

$csv | Export-Csv 'output.csv' -NoTypeInformation

일부 응용 프로그램의 경우 해시 테이블을 생성하고 다음을 사용하는 것을 발견했습니다..values양호한 열로 간주됩니다(이를 통해 열거 중인 다른 개체에 대한 상호 참조 유효성 검사가 가능합니다).

이 경우 #powershell on freenode는 열 헤더를 사용해야 하므로 순서가 지정된 해시 테이블에 주의를 기울였습니다.

..values

$newcolumnobj =  [ordered]@{}
#input data into a hash table so that we can more easily reference the `.values` as an object to be inserted in the CSV
$newcolumnobj.add("volume name", $currenttime)

#enumerate $deltas [this will be the object that contains the volume information `$volumedeltas`)
#  add just the new deltas to the newcolumn object
foreach ($item in $deltas){ 
  $newcolumnobj.add($item.volume,$item.delta)
}

$originalcsv = @(import-csv $targetdeltacsv)

#thanks to pscookiemonster in #powershell on freenode
for($i=0; $i -lt $originalcsv.count; $i++){
  $originalcsv[$i] | Select-Object *, @{l="$currenttime"; e={$newcolumnobj.item($i)}}
}

예제는 두 개의 CSV에서 값의 차이를 찾기 위해 산술을 수행하는 방법과 관련되어 있습니다.

아무것도 없는 CSV 파일 생성

$csv >> "$PSScriptRoot/dpg.csv"

csv 파일의 경로를 정의합니다.여기서 $pscriptroot은 스크립트의 루트입니다.

$csv = "$PSScriptRoot/dpg.csv"

이제 열을 추가합니다.

$csv | select vds, protgroup, vlan, ports | Export-Csv $csv

언급URL : https://stackoverflow.com/questions/17022017/add-column-to-csv-windows-powershell

반응형