Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Powershell中对CSV中的IP地址列表进行排序_Powershell_Csv_Sorting_Casting_String Conversion - Fatal编程技术网

如何在Powershell中对CSV中的IP地址列表进行排序

如何在Powershell中对CSV中的IP地址列表进行排序,powershell,csv,sorting,casting,string-conversion,Powershell,Csv,Sorting,Casting,String Conversion,我目前有一个名为computer_info的CSV文件中的IP地址列表,我想将它们导入powershell并对其进行排序。我在这里尝试了一些方法,但没有成功。我知道如何导入CSV并识别我想要使用的列,但我不知道如何按实际IP地址顺序对字符串进行排序 我现在有 import-csv computer_info.csv| select ip_addr | sort ip_addr 感谢您的建议一种推荐的方法是利用[System.Version] Import-CSV computer_info.c

我目前有一个名为computer_info的CSV文件中的IP地址列表,我想将它们导入powershell并对其进行排序。我在这里尝试了一些方法,但没有成功。我知道如何导入CSV并识别我想要使用的列,但我不知道如何按实际IP地址顺序对字符串进行排序

我现在有

import-csv computer_info.csv| select ip_addr | sort ip_addr

感谢您的建议

一种推荐的方法是利用
[System.Version]

Import-CSV computer_info.csv| Select ip_addr | Sort {[System.Version]$_}
这并不是版本的预期目的,但它是有效的。这会将IP地址转换为可以排序的版本对象

  • 八位组1变为Version.Major
  • 八位组2变为Version.Minor
  • 八位组3变为Version.Build
  • 八位字节4变为Version.Revision

一种推荐的方法是利用
[System.Version]

Import-CSV computer_info.csv| Select ip_addr | Sort {[System.Version]$_}
这并不是版本的预期目的,但它是有效的。这会将IP地址转换为可以排序的版本对象

  • 八位组1变为Version.Major
  • 八位组2变为Version.Minor
  • 八位组3变为Version.Build
  • 八位字节4变为Version.Revision
其他方法:

import-csv "C:\temp\test.txt" | %{
    $array=$_.ip_addr.Split('.')
    [pscustomobject]@{Part1=[int]$array[0];Part2=[int]$array[1];Part3=[int]$array[2];Part4=[int]$array[3];IP=$_.ip_addr}   
} | sort Part1, Part2, Part3, Part4 | select IP
其他方法:

import-csv "C:\temp\test.txt" | %{
    $array=$_.ip_addr.Split('.')
    [pscustomobject]@{Part1=[int]$array[0];Part2=[int]$array[1];Part3=[int]$array[2];Part4=[int]$array[3];IP=$_.ip_addr}   
} | sort Part1, Part2, Part3, Part4 | select IP

结果是什么?您遇到了什么问题?地址以字符串形式输入,因此它逐位排序,例如,它会说10.11.10.252小于10.11.10.26,因此在它前面列出,因为10.11.10.2匹配,但下一个数字是5,而不是6,因此它确定10.11.10.252较小,因此被列出在10.11.10.26之前,我觉得解决方案在于将字符串转换为另一种类型,然后对其进行排序,但我还没有找到合适的解决方案是的,结果是什么?您遇到了什么问题?地址以字符串形式输入,因此它逐位排序,例如,它会说10.11.10.252小于10.11.10.26,因此在它前面列出,因为10.11.10.2匹配,但下一个数字是5,而不是6,因此它确定10.11.10.252较小,因此被列出在10.11.10.26之前,我觉得解决方案在于将字符串转换为另一种类型,然后对其进行排序,但我还没有找到合适的解决方案。谢谢,我在今天早些时候研究这一问题时已经看过了这一页。当我按照链接上的说明操作时,会收到错误消息,提示无法转换selected.system类型的值。management.automation.PScustomObject输入System.Version它使用它们提供的格式的值,但在我尝试将csv值作为addresses@rpi_engin33rs使用编辑按钮重试。这应该行得通。它遍历每个ipaddress并抛出相同的错误,然后在所有错误消息之后在底部吐出未排序的列表。为什么不将其转换为
ipaddress
?谢谢,我今天早些时候在研究此问题时已经查看了该页面。当我按照链接上的说明操作时,会收到错误消息,提示无法转换selected.system类型的值。management.automation.PScustomObject输入System.Version它使用它们提供的格式的值,但在我尝试将csv值作为addresses@rpi_engin33rs使用编辑按钮重试。这应该行得通。它遍历每个ipaddress并抛出相同的错误,然后在所有错误消息之后在底部吐出未排序的列表为什么不转换为
ipaddress