2012-11-29 118 views
2

我是PowerShell的新手,但這看起來是做這個任務的最佳工具。 有一個CSV文件看起來像這樣:按列使用Powershell拆分csv文件

Date,mary1,mary2,maryr3,mary4 
9/01/2011 1:00,1.39,3.43,3.29,1.83 
9/01/2011 3:00,0,0,0,0 
9/01/2011 4:00,0,0,0,0 
9/01/2011 5:00,0,0,0,0 
9/01/2011 6:00,1.91,0.07,0.09,0.09 
9/01/2011 7:00,5.57,2.01,2.11,3.4 
9/01/2011 8:00,0.53,0.41,0.35,2.01 
9/01/2011 9:00,4.72,0.15,0.21,3.15 
9/01/2011 10:00,0.21,0,0.49,0.72 
9/01/2011 11:00,2.44,0.77,2.06,1.7 
9/01/2011 12:00,0,4.91,5.21,1.98 

這是逗號分隔。 我想分解成多個文本文件包含一列,基於標題列。

實際上我會有多個列,所以我想要一個更通用的代碼來處理更多的行和列。

對此有何看法?我能夠使用拆分功能,並獲得單個列,但我的PowerShell的知識,但不允許我做多個提取。

任何幫助將不勝感激。

回答

1

嘗試:

$a = Import-Csv .\myfile.csv 
$b = $a[0] | Get-Member | ? { $_.membertype -eq 'noteproperty'} | select name 
$b | % { $a | ft -Property $_.name | out-file "$($_.name).txt" } 
+0

這很好。謝謝 – Mary

+0

很高興幫助! –

0

查找Import-CSV或按行處理文件。要逐行讀取文件,請使用.Net Framework。按逗號分隔每行,並根據數組索引添加所需列以輸出文件。注意行式處理:如果源數據中有逗號,這將會突然崩潰。像這樣,

# Open the source file 
$file = [IO.File]::OpenText("somefile.csv") 
# Read each line 
while($line = $file.ReadLine()) { 
    # Split line data on comma 
    $l= $line.Split(',') 
    # Add columns 0 and 2 other file 1 
    add-content "otherfile1.csv" $("{0},{1}" -f $l[0], $l[2]) 
    # Add columns 1, 3 and 5 other file 2 
    add-content "otherfile2.csv" $("{0},{1},{2}" -f $l[1], $l[3], $l[5]) 
} 
+0

非常感謝,我現在試試這個,送還給你。 – Mary

+0

非常感謝,這對於將它分成兩個文件非常有效,但是我想知道如何循環它以一次提取一列並給我總共5個(或n個)文件? – Mary

0
###import csv file with value 

$ps1 = Import-Csv .\testps.csv 
    foreach($p in $ps1){ 

## value which will be seprated 

$t = $p.test 
#####split delimiter is space you can select your own like ,/etc. 
$t1 = $t.Split(" ") 
##########first value 
    $test1 = $t1[0] 
######second value 
    $test2 = $t1[1] 
    #####Adding value in csv file test1 and test2 
    echo $p | Select-Object *,@{n='test1';e={"$test1"}},@{n='test2';e= {"$test2"}}|Export-Csv -Append testdone.csv 

}