gpt4 book ai didi

powershell - 使用Powershell编辑文本文件中的特定数据列

转载 作者:行者123 更新时间:2023-12-03 01:26:36 28 4
gpt4 key购买 nike

因此,我有一个请求,要求使用一组唯一的数字替换列值来编辑csv文件。下面是原始输入文件的示例,带有标题行和几行。请注意,这些行没有NO列标题。

HH ### SLH304 01100001 2 20200606 20200605 011100
DD|GZFD|IE|USD|20200605|EUR200717||
DD|GZFD|IE|USD|20200605|EUR200717||

我要做的是更改,说第3列中的值带有唯一的数字。

到目前为止,我有以下……
$i=0

$txtin = Get-Content "C:\Temp\InFile.txt" | ForEach {"$($_.split('|'))"-replace $_[2],$i++} |Out-File C:\Temp\csvout.txt

…但这不起作用,因为它删除了定界符并在错误的位置添加了数字…
HH0###0000000SLH30400110000100000002000000202006060202006050011100
1D1D1 1G1Z1F1D1 1I1E1 1U1S1D1 12101210101610151 1E1U1R1210101711171 1 1
2D2D2 2G2Z2F2D2 2I2E2 2U2S2D2 22202220202620252 2E2U2R2220202721272 2 2

理想情况下,我希望它看起来像这样,其中“IE”的值已在每行中替换为“01”和“02” ...
HH ### SLH304 01100001 2 20200606 20200605 011100

DD|GZFD|01|USD|20200605|EUR200717||

DD|GZFD|02|USD|20200605|EUR200717||

任何有关如何解决的想法将不胜感激。

最佳答案

我认为,通过将其扩展到多行代码将使其更容易:

$txtin = Get-Content 'C:\Temp\InFile.txt'
# loop through the lines, skipping the first line
for ($i = 1; $i -lt $txtin.Count; $i++){
$parts = $txtin[$i].Split('|') # or use regex -split '\|'
if ($parts.Count -ge 3) {
$parts[2] = '{0:00}' -f $i # update the 3rd column
$txtin[$i] = $parts -join '|' # rejoin the parts with '|'
}
}

$txtin | Out-File -FilePath 'C:\Temp\csvout.txt'

输出将是:

HH ### SLH304 01100001 2 20200606 20200605 011100
DD | GZFD | 01 | USD | 20200605 | EUR200717 ||
DD | GZFD | 02 | USD | 20200605 | EUR200717 ||

更新为使用 mklement0建议的更强大的检查。当分割后行中没有至少三个部分时,这可以避免错误

关于powershell - 使用Powershell编辑文本文件中的特定数据列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62323020/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com