我有一个制表符分隔的txt文件,我需要切换第一列和第二列名称(不切换列数据)。换句话说,我需要将A(Id)重命名为B(ExternalId),将B(ExternalId)重命名为A(Id)。文件中的其他列(其他数据)应保持不变。我是PowerShell的新手,请指教。据我所知,我需要使用import / export csv cmdlet。
我试过这个,但是它的工作方式不正确......
Import-Csv 'C:\original_users.txt' |
Select-Object Id, @{Name="ExternalId";Expression={$_."Id"}}; Select-Object ExternalId, @{Name="Id";Expression={$_."ExternalId"}} |
Export-Csv 'C:\changed_users.txt'
答案 0 :(得分:0)
Import-CSV
和Export-CSV
cmdlet有其优势,但这可能不是其中之一。后一个cmdlet会引入可能不在原始文件中且可能不需要的引用。
无论哪种方式,为什么不在第一行做一些文本操作!让我们读入文件,然后输出第一个内衬,编辑和文件的其余部分。此示例使用新位置,但您可以轻松地将其写回同一文件。
# Get the full file into a variable
$fullFile = Get-Content "c:\temp\mockdata.csv"
# Parse the first line into a column array
$columns = $fullFile[0].Split("`t")
# Rebuild the header by switching the columns order as desired.
$newHeader = ($columns[1],$columns[0] + ($columns | Select-Object -Skip 2)) -join "`t"
# Write the header back to file then the rest of the data.
$outputPath = "C:\somepath.txt"
$newHeader | Set-Content $outputPath
$fullFile | Select-Object -Skip 1 | Add-Content $outputPath
这也保留了其他列及其数据的存在。