PowerShell通过CSV对象调整文本列序后输出纯空格分隔字符串
PowerShell 调整文本列顺序后输出空格分隔格式的实现方案
你提到的两个实现方向都可行,以下是可直接运行的代码,优先推荐逻辑更简洁的第一种方案:
方案1:直接遍历对象属性拼接(推荐)
不需要走CSV导出的绕路逻辑,调整列顺序后直接提取每行的所有属性值,用空格拼接即可,全程不会产生多余的引号、逗号字符:
$Data = Import-CSV C:\test\test6\sqlInsertList.txt -Delimiter ' ' -Header "Col1","Col2","Col3","Col4","Col5","Col6" $Data | Select-Object Col1,Col3,Col2,Col4,Col5,Col6 | ForEach-Object { $_.PSObject.Properties.Value -join ' ' } | Out-File C:\test\test6\newSqlInsertList.txt -Encoding utf8
运行后输出的文件内容和预期格式完全一致:
001 Alan AALTON 25 Every Street 002 James BROWN 101 Browns Road 003 Colin CAMPBELL 57 Camp Avenue
别再逐列写硬编码拼接,所有Import-Csv生成的对象都自带PSObject属性集合,直接取所有属性值用空格拼接即可,后续调整列顺序、增减列时,只需要修改Select-Object后面的列列表,拼接逻辑完全不用改,能省掉大量重复代码。
方案2:清洗CSV格式输出
如果要沿用CSV导出的处理链路,可以先把内容转成CSV格式字符串,跳过表头后替换掉多余的引号和逗号:
$Data = Import-CSV C:\test\test6\sqlInsertList.txt -Delimiter ' ' -Header "Col1","Col2","Col3","Col4","Col5","Col6" $Data | Select-Object Col1,Col3,Col2,Col4,Col5,Col6 | ConvertTo-Csv -NoTypeInformation | Select-Object -Skip 1 | ForEach-Object { $_.Trim('"') -replace '","',' ' } | Out-File C:\test\test6\newSqlInsertList.txt -Encoding utf8
这个方案的输出结果和方案1完全一致,只是处理逻辑多了一步格式替换,适合需要兼容原有CSV处理流程的场景。
问题相关原始信息
原始输入文本
001 AALTON Alan 25 Every Street 002 BROWN James 101 Browns Road 003 CAMPBELL Colin 57 Camp Avenue
需求说明
将原文本中第2列(姓氏)和第3列(名字)顺序调换,输出纯空格分隔的文本,不保留CSV格式自带的引号、逗号、表头内容。
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

