因此,我有一个CSV文件,其中包含我想使用PowerShell将(其中一些)转置为列的行。
示例如下:
ALPHA
CD
CL
CM
-5
0.1
-0.2
0.05
0
0.4
0.4
-0.08
5
0.5
0.8
-0.1
我想要的是这样的:
Alpha CD CL CM
-5 0.1 -0.2 0.05
0 0.4 0.4 -0.08
5 0.5 0.8 -0.1
作为参考,我从一个.dat
数据文件输出中得到了这些值,其中有超过400行的信息。我使用out-file
将其重新格式化为CSV文件,并跳过了所有不需要的行。
信息被分成行而不是列,这意味着ALPHA CD CL CM
都在一个单元格中,中间有空格,所以我使用split
命令将它们分成行,如下所示。
$ text .split () | where { $ _ }
现在我想把其中的一些转回到列中。
问题是它不是固定的数量,这意味着它不总是四行四列,有时我会得到五行,我想变成五列,然后把每四行变成四列之后。
抱歉,我说得太多了,但事情是这样的:
Row 1 > Column 1 Row 1
Row 2 > Column 2 Row 1
Row 3 > Column 3 Row 1
Row 4 > Column 4 Row 1
Row 5 > Column 5 Row 1
Row 6 > Column 1 Row 2
Row 7 > Column 2 Row 2
Row 8 > Column 3 Row 2
Row 9 > Column 4 Row 2
Row 10 > Column 5 Row 2
Row 11 > Column 1 Row 3
Row 12 > Column 2 Row 3
Row 13 > Column 3 Row 3
Row 14 > Column 4 Row 3
Row 15 > Column 1 Row 4
请注意它是如何从五列变成现在的四列的。
如果在PowerShell之外的其他方法中可以更容易地完成,我可以使用PowerShell来运行它们,即调用PowerShell的批处理文件,这对我来说很好,因为我需要自动化一个非常长的过程,这是后面的过程步骤之一。
PS:数据没有干净地用逗号分隔。使用的程序 * DATCOM * 输出一个数据文件,它看起来整洁,结构化的文本格式,但当你导出CSV时它会破坏它,所以必须使用:
out-file name csv
PPS:没有明确的分隔符/截止点,也没有重复的数字或其他任何可以作为提示的东西,我必须按行号来做,这是我知道的,由于之前处理 * DATCOM *。
我在上面解释了很多,但是我试着用split
命令,它把它们都放到行中,所以如果有一种方法,可以用空格分隔列(就像在 * Excel * 中一样)这将是完美的,甚至比将它们分成行然后转置到列更好。它必须完全像 * Excel *。问题是每个值之间有4 - 8个"空格",所以如果我尝试
import-csv -delim " "
在文件上,我得到了类似Alpha H1 H2 H3 CD H4 H5 H6 H7 H8 CL
的东西,其他所有东西都被破坏了,而如果我真的打开 * Excel *,突出显示单元格,文本到列〉分隔〉检查"空格",结果是完美的。
以下是这些文件:https://easyupload.io/m/6q70ei
for006.dat
是由 * DATCOM * 生成的数据文件。Output1
是我想做的,如上所述(行到列)。Output2
是我希望我以后能做的,即删除一列和一行,使它更干净,这是我理想的最终输出。
5条答案
按热度按时间vxqlmq5t1#
尝试以下操作:
f5emj3cl2#
您可以使用PowerShell的开始/Process/End生命周期来“缓冲”输入数据,直到有足够的数据用于“行”,然后输出该数据并开始收集下一行:
这将生成一个字符串列表,可以将其写入磁盘或使用PowerShell中的常规CSV解析工具进行解析:
gev0vcfq3#
一旦知道头文件和数据的行数,就可以使用
ConvertFrom-Csv
将文件转换为对象数组。完成后,很容易创建一个新的csv,如下所示:
屏幕输出:
ghhaqwfi4#
两个(自定义)函数可以帮助您从
for006.dat
中抓取数据:#15136
Add-From
and-To
parameters toSelect-String
)结果:
l2osamch5#
嗯......我担心你的描述很混乱,所以我忘记了,专注于你的文件......
下面的批处理文件读取
for006.dat
文件并生成.csv格式的“理想最终输出”Output2.xlsx
文件。这是输出2.csv:
您还可以生成不带引号的.csv输出文件,只需删除最后一个
echo
命令中的引号即可