【问题标题】:Text file processing (read/write) using Powershell使用 Powershell 处理文本文件(读/写)
【发布时间】:2016-11-05 01:26:25
【问题描述】:

我有一个包含 n 条记录的文本文件,每条记录包含由制表符分隔的两列。我正在阅读这个文本文件并使用 Powershell 脚本在第二列上执行一些映射。我能够执行读取文本文件并能够执行映射。但是当我使用 set-content 命令编写结果时,我得到了以下结果。

输入文件:

4803 6000000

4802 6000000

4803 6000000

4803 5000000

输出文件:

@{Column1=4803;列2=5000000;}

@{Column1=4802;列2=6000000;}

@{Column1=4803;列2=5000000;}

@{Column1=4803;列2=5000000;}

我不知道为什么我在每条记录中都得到了列名。我不想看到这样的结果 @{Column1=4803;列 2=5000000;} 。但它应该是这样的 - 4803 5000000。请你帮我删除输出文件中的特殊字符和列名。

预期结果:

4803 5000000

4802 6000000

4803 5000000

4803 5000000

脚本:

$fields = Get-Content Temp.txt
$results = @()
foreach($i in $fields)
{
    $field  = $i -split '\t' -replace '^\s*|\s*$'
    $field1 = $field[0]
    $field2 = $field[1]
    if ($field1 -eq "4803" -and $field[2].substring(0,2) -eq "60")
        {
            $field2 = "5000000"
        }
    else
        {
            $field2 = $field[1]
        }
            $details = @{       
                    Column1     = $field1
                    Column2     = $field2
                }
        $results += New-Object PSObject -Property $details 
    }
   $results | Select-Object Column1, Column2 | Set-Content -path Temp.txt    [Environment]::Exit(0)

【问题讨论】:

    标签: powershell


    【解决方案1】:

    尝试将最后一行代码更改为使用Format-Table

    $results | Format-Table -HideTableHeaders | Set-Content -path Temp.txt    [Environment]::Exit(0)
    

    这应该像您期望的那样打印数据。

    编辑:不同的尝试:

    $results | ForEach-Object { '{0} {1}' -f $_.Column1,$_.Column2 } | Set-Content -path Temp.txt    [Environment]::Exit(0)
    

    【讨论】:

    • 顺便说一句:您可以通过 Import-Csv Temp.txt -Delimiter ' ' -headers 'Column1', 'Column2' 导入数据
    • 我尝试使用 Format-Table -HideTableHeaders。但仍然得到相同的结果。您认为 Import-csv 是处理此类要求的文本文件的最佳选择吗?
    • 我尝试使用 ForEach-Object { '{0} {1}' -f $_.Column1,$_.Column2 } |。有效。非常感谢。
    • 嗨.. 请你帮我把记录分组。例如,我在输入文件中多了一份数据。我需要根据 Column1 和 Column2 对记录进行分组。
    • 请打开一个新问题。并标记答案,如果它有帮助
    猜你喜欢
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 2018-04-06
    • 2014-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-21
    相关资源
    最近更新 更多