Powershell-从文件中读取行并创建一个排序表

时间:2015-12-23 18:50:04

标签: powershell

我想完成以下任务:

  1. 利用API检索数据 - 完整
  2. 正则表达我想要的字符串 - 完整
  3. 创建一个foreach循环来获取每个字符串,然后计算每个字符串的字符(这会创建2"列"数据 - >字符串名称和计数) - 完成
  4. 将数据输出到顶部字符数最多的漂亮排序表 - 无法弄清楚
  5. 现在我得到了这个输出:

    String Name    Count
    -----------    -----
    example 1       9
    example23       10
    example         8
    

    我想这样:

    String Name    Count
    -----------    -----
    example23       10
    example 1       9
    example         8
    

    以下是我的代码:

    curl -k -X GET -H <API CALL> C:\list.txt
    
    $scriptfile = Get-Content C:\list.txt 
    
    $listsummaryfile = $scriptfile | 
        Select-String -Pattern '(?smi)"name":"(.*?)"' -AllMatches |
        Foreach { $_.Matches } | 
        Foreach { $_.Groups[1] } |
        Foreach { $_.Value }
    
    foreach ($_ in $listsummaryfile ) {
    
        $measureObject  = $_ | Measure-Object -Character
        $count = $measureObject.Characters
    
        $info = New-Object -TypeName PSCustomObject -Property @{
            "String Name"= $_; Count = $count
        }
    
        $info
    }
    

    输出包含所有数据,但我无法弄清楚如何对其进行排序。我已经尝试过在网络上找到的排序对象,排序和许多其他命令,但没有任何工作(我认为它与循环有关,并在其中调用$ info,但改变它没有&# 39; t产生所有输出)。任何帮助将不胜感激,谢谢!

2 个答案:

答案 0 :(得分:1)

它应该像翻转到Foreach-Object那样简单,然后用它来排序:

$listsummaryfile |
    Foreach-Object {
        $measureObject  = $_ | Measure-Object -Character
        $count = $measureObject.Characters

        $info = New-Object -TypeName PSCustomObject -Property @{
            "String Name"= $_; Count = $count
        }
        $info
    } | Sort-Object -Property Count

答案 1 :(得分:0)

如果我错了,请原谅我,但我认为你在这里过分复杂了你的问题。无需计算字符串的字符数,因为所有字符串都已具有length属性(一个是别名)。

PS C:\temp> "adfasdf".Length
7

相反,您可以直接使用Sort-Object计算属性。由于它是一个字符串而不是一个复杂的对象,我们必须按照我期望的方式拉出实际的字符串。

$listsummaryfile | 
    Sort-Object Length -Desc | 
    Select-Object @{name="string name";expression={$_.psobject.BaseObject}},Length