需要Powershell命令从列分隔的文本文件中删除ID /护照号

时间:2019-04-19 12:17:02

标签: powershell

具有以下文本文件;

Powershell的新手,因此在这里需要指导。

输入TXT

membercode|id_number|passportnumber
BED_ODG0001|5007160081|
PF-000552516|7605430081|
PF-000704976|0385084|
PF-000678375||EP3800795

只需要ID_Number列,但是如果没有值,请将Passportnumber值移到该列中。

所需的输出TXT

5007160081
7605430081
0385084
EP3800795

1 个答案:

答案 0 :(得分:1)

我对此感到无聊,所以你去:

看看Import-Csv cmdlet。 基本上,您输入的txt文件看起来像一个有效的CSV文件,包括字段标题,其中使用竖线符号|分隔字段。

结合使用Import-Csv和参数-Delimiter,将数据加载为对象数组确实很容易。 文件中的每个字段都将在这些对象中表示为属性,这些属性具有文件头中定义的名称。

$inputFile  = 'YOUR PATH AND FILENAME TO THE INPUT TXT FILE'
$outputFile = 'YOUR PATH AND FILENAME FOR THE OUTPUT TXT FILE'

# load the data from the CSV as an array of objects into a variable
$data = Import-Csv -Path $inputFile -Delimiter '|'

# loop through the elements of this array (the data rows in the file).
# inside the loop, the automatic variable '$_' is an object representing 
# one element in the array (~~> row in the file)
$data | ForEach-Object {
    # output the field 'id_number' or if that is not there, use the field 'passportnumber'
    # and write it to the $outputFile file
    if ($_.id_number) { $_.id_number } else { $_.passportnumber }
} | Set-Content -Path $outputFile

结果:

5007160081
7605430081
0385084
EP3800795