如何更改 powershell 中的列位置?
How to change column position in powershell?
有什么简单的方法可以改变列的位置吗?我正在寻找一种方法如何将第 1 列从每一行的开始移动到和,我还想添加零列作为倒数第二列。请参阅下面的 txt 文件示例。
感谢您的任何建议。
文件样本
TEXT1,02/10/2015,55.930,57.005,55.600,56.890,1890
TEXT2,02/10/2015,51.060,52.620,50.850,52.510,4935
TEXT3,02/10/2015,50.014,50.74,55.55,52.55,5551
输出:
02/10/2015,55.930,57.005,55.600,56.890,1890,0,TEXT1
02/10/2015,51.060,52.620,50.850,52.510,4935,0,TEXT2
02/10/2015,50.014,50.74,55.55,52.55,5551,0,TEXT3
当然可以,按逗号拆分,吐出结果减去用逗号连接的第一个结果,添加一个 0,然后将第一个结果添加到末尾并用逗号连接整个结果。类似于:
$Input = @"
TEXT1,02/10/2015,55.930,57.005,55.600,56.890,1890
TEXT2,02/10/2015,51.060,52.620,50.850,52.510,4935
TEXT3,02/10/2015,50.014,50.74,55.55,52.55,5551
"@ -split "`n"|ForEach{$_.trim()}
$Input|ForEach{
$split = $_.split(',')
($Split[1..($split.count-1)]-join ','),0,$split[0] -join ','
}
我创建了文件 test.txt 来包含您的样本数据。我为每个字段分配了一个名称,"one"、"two"、"three" 等,这样我就可以按名称 select 它们,然后只需 select 编辑并导出回按您想要的顺序排列 csv。
首先,将零添加到末尾,它将成为倒数第二个。
gc .\test.txt | %{ "$_,0" } | Out-File test1.txt
然后,重新排列顺序。
Import-Csv .\test.txt -Header "one","two","three","four","five","six","seven","eight" | Select-Object -Property two,three,four,five,six,seven,eight,one | Export-Csv test2.txt -NoTypeInformation
这将获取输出文件并删除引号和 header 行(如果您不想使用它们)。
gc .\test2.txt | %{ $_.replace('"','')} | Select-Object -Skip 1 | out-file test3.txt
另一个选项:
#Prepare test file
(@'
TEXT1,02/10/2015,55.930,57.005,55.600,56.890,1890
TEXT2,02/10/2015,51.060,52.620,50.850,52.510,4935
TEXT3,02/10/2015,50.014,50.74,55.55,52.55,5551
'@).split("`n") |
foreach {$_.trim()} |
sc testfile.txt
#Script starts here
$file = 'testfile.txt'
(get-content $file -ReadCount 0) |
foreach {
'{1},{2},{3},{4},{5},{6},0,{0}' -f $_.split(',')
} | Set-Content $file
#End of script
#show results
get-content $file
02/10/2015,55.930,57.005,55.600,56.890,1890,0,TEXT1
02/10/2015,51.060,52.620,50.850,52.510,4935,0,TEXT2
02/10/2015,50.014,50.74,55.55,52.55,5551,0,TEXT3
有什么简单的方法可以改变列的位置吗?我正在寻找一种方法如何将第 1 列从每一行的开始移动到和,我还想添加零列作为倒数第二列。请参阅下面的 txt 文件示例。
感谢您的任何建议。
文件样本
TEXT1,02/10/2015,55.930,57.005,55.600,56.890,1890
TEXT2,02/10/2015,51.060,52.620,50.850,52.510,4935
TEXT3,02/10/2015,50.014,50.74,55.55,52.55,5551
输出:
02/10/2015,55.930,57.005,55.600,56.890,1890,0,TEXT1
02/10/2015,51.060,52.620,50.850,52.510,4935,0,TEXT2
02/10/2015,50.014,50.74,55.55,52.55,5551,0,TEXT3
当然可以,按逗号拆分,吐出结果减去用逗号连接的第一个结果,添加一个 0,然后将第一个结果添加到末尾并用逗号连接整个结果。类似于:
$Input = @"
TEXT1,02/10/2015,55.930,57.005,55.600,56.890,1890
TEXT2,02/10/2015,51.060,52.620,50.850,52.510,4935
TEXT3,02/10/2015,50.014,50.74,55.55,52.55,5551
"@ -split "`n"|ForEach{$_.trim()}
$Input|ForEach{
$split = $_.split(',')
($Split[1..($split.count-1)]-join ','),0,$split[0] -join ','
}
我创建了文件 test.txt 来包含您的样本数据。我为每个字段分配了一个名称,"one"、"two"、"three" 等,这样我就可以按名称 select 它们,然后只需 select 编辑并导出回按您想要的顺序排列 csv。
首先,将零添加到末尾,它将成为倒数第二个。
gc .\test.txt | %{ "$_,0" } | Out-File test1.txt
然后,重新排列顺序。
Import-Csv .\test.txt -Header "one","two","three","four","five","six","seven","eight" | Select-Object -Property two,three,four,five,six,seven,eight,one | Export-Csv test2.txt -NoTypeInformation
这将获取输出文件并删除引号和 header 行(如果您不想使用它们)。
gc .\test2.txt | %{ $_.replace('"','')} | Select-Object -Skip 1 | out-file test3.txt
另一个选项:
#Prepare test file
(@'
TEXT1,02/10/2015,55.930,57.005,55.600,56.890,1890
TEXT2,02/10/2015,51.060,52.620,50.850,52.510,4935
TEXT3,02/10/2015,50.014,50.74,55.55,52.55,5551
'@).split("`n") |
foreach {$_.trim()} |
sc testfile.txt
#Script starts here
$file = 'testfile.txt'
(get-content $file -ReadCount 0) |
foreach {
'{1},{2},{3},{4},{5},{6},0,{0}' -f $_.split(',')
} | Set-Content $file
#End of script
#show results
get-content $file
02/10/2015,55.930,57.005,55.600,56.890,1890,0,TEXT1
02/10/2015,51.060,52.620,50.850,52.510,4935,0,TEXT2
02/10/2015,50.014,50.74,55.55,52.55,5551,0,TEXT3