Powershell 如何将一列(多行)转换为多列?

Powershell 如何将一列(多行)转换为多列?,powershell,Powershell,我有一个包含以下内容的文件: 0 ABC 1 181.12 2 05/07/16 3 1002 4 1211511108 6 1902 7 1902 10 hello -1 0 ABC 1 1333.21 2 02/02/16 3 1294 4 1202514258 6 1294 7 1294 10 HAI -1 ... 我想转置上面的文件内容,如下所示。上面列表中的'-1'是记录分隔符,指示下一条记录的开始 ABC,181.12,05/07/16,1002,1211511108,1902,19

我有一个包含以下内容的文件:

0 ABC 1 181.12 2 05/07/16 3 1002 4 1211511108 6 1902 7 1902 10 hello -1 0 ABC 1 1333.21 2 02/02/16 3 1294 4 1202514258 6 1294 7 1294 10 HAI -1 ... 我想转置上面的文件内容,如下所示。上面列表中的'-1'是记录分隔符,指示下一条记录的开始

ABC,181.12,05/07/16,1002,1211511108,1902,1902,hello ABC,1333.21,02/02/16,1294,1202514258,1294,1294,HAI ...
请告诉我如何实现此目的。

将文件作为单个字符串读取:

$txt = Get-Content 'C:\path\to\your.txt' | Out-String
在-1行拆分内容:

在换行符处拆分每个块:

... | ForEach-Object {
    $arr = $_ -split '\r?\n'
}
选择奇数索引处的值跳过数字行并用逗号连接:

$indexes = 1..$($arr.Count - 1) | Where-Object { ($_ % 2) -ne 0 }
$arr[$indexes] -join ','

您可以使用F或C之类的语言,为Powershell编写cmdlet。或者一个简单的.exe,这取决于您接下来打算对数据执行的操作。在F中,最多20行。如果你没有编程背景,你可能想选择一种语言,这样你就不会遇到这样的问题。也许你可以直接在powershell中使用它——但以我的经验来看,与学习一门真正的编程语言并在未来20年中使用它相比,学习一门shell语言并不是一个长久的收获。嗨,Ansgar,我只是在整合你上面的代码。这是正确的吗$txt=Get Content'C:\path\to\your.txt'| Out String$txt-split'?m^-1\r?\n'| ForEach Object{$arr=$\uu-split'\r?\n'}$indexes=1..$$arr.Count-1 |其中Object{$\u%2-ne 0}$arr[$indexes]-join'.@MaheshMohan如果您实际尝试了该代码,您会注意到它不可能是正确的,因为它只会返回输入文件中的最后一条记录。移动选择并加入到循环中。嗨,Ansgar,我运行了上面的合并代码,它没有返回任何记录,也没有返回最后一条记录。我可以知道你指的是哪种选择吗?请让我知道。请去寻找一个PowerShell教程,因为你显然是在你的头方式。所以,当你甚至不了解你所使用的语言的基本知识时,这不是适合你的地方。嗨,安斯加,非常感谢你抽出时间。我知道结果了。再一次,谢谢!
$indexes = 1..$($arr.Count - 1) | Where-Object { ($_ % 2) -ne 0 }
$arr[$indexes] -join ','