2017-10-16 8 views
1

私はタブで区切られたtxtファイルを持っています。私は第1列と第2列の名前を(列データを切り替えることなく)切り替える必要があります。つまり、A(Id)をB(ExternalId)、B(ExternalId)をA(Id)に変更する必要があります。ファイル内の他の列(その他のデータ)は変更しないでください。私はPowerShellで非常に新しいです、アドバイスをしてください。私が理解するように、import/export csvコマンドレットを使用する必要があります。タブ区切りファイルで列見出しを変更するにはどうすればよいですか?

が、私はこれをしようと試みたが、それは正しい方法で作業していない...

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

Import-CSVExport-CSVコマンドレットは、自分の強みを持っているが、これはそのうちの一つではないかもしれません。後者のコマンドレットでは、元のファイルにない可能性があり、望ましくないかもしれない引用を導入します。

どちらの方法でも、最初の行で何らかのテキスト操作を行うだけではありません。ファイルを読み込み、最初に並んだ、編集した、残りのファイルを出力します。このサンプルは新しい場所を使用しますが、同じファイルに簡単に書き戻すことができます。

# 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 

これにより、他の列とそのデータも保存されます。

+0

ありがとうございました!あなたは最高です :) –

関連する問題