Board logo

标题: [问题求助] [已解决]PowerShell怎样按照某列中的数字大小进行排序? [打印本页]

作者: DAIC    时间: 2013-7-24 12:54     标题: [已解决]PowerShell怎样按照某列中的数字大小进行排序?

本帖最后由 DAIC 于 2013-7-29 21:54 编辑

文件内容a.txt:
Power DDD 2
Power AAA 10
Power CCC 3
Power BBB 1

按照第三列的数字从小到大排序,得到b.txt:
Power BBB 1
Power DDD 2
Power CCC 3
Power AAA 10
作者: PowerShell    时间: 2013-7-24 18:39

Sort-Object cmdlet 根据对象的属性值按升序或降序对对象排序。

您可以指定一个属性或多个属性(用于多键排序),也可以选择区分大小写或不区分大小写的排序。您还可以指示 Sort-Object 只显示对于特定属性具有唯一值的对象。
-Property <Object[]>
指定排序时要使用的属性。对象将基于这些属性的值进行排序。输入属性的名称。允许使用通配符。

如果您指定多个属性,则先按第一个属性对对象进行排序。如果多个对象的第一个属性的值相同,则按第二个属性对这些对象排序。此过程将一直继续,直至没有其他指定的属性或没有对象组。

如果您未指定属性,cmdlet 会根据对象类型的默认属性进行排序。

Property 参数的值可以是新的计算属性。若要创建计算属性,请使用哈希表。有效键包括:

-- Expression <字符串> 或 <脚本块>

-- Ascending <布尔值>

-- Descending <布尔值>
作者: DAIC    时间: 2013-7-24 20:20

回复 2# PowerShell


    太深奥了,看不明白,能否给个代码学习一下?
作者: DAIC    时间: 2013-7-24 21:08

回复 2# PowerShell
  1. get-content a.txt | sort-object
复制代码
这样得到的结果不对,10跑到前面去了:

e:\Test>powershell -file test.ps1
Power AAA 10
Power BBB 1
Power CCC 3
Power DDD 2
作者: PowerShell    时间: 2013-7-25 20:18

    很简单的,别总等人喂到嘴里啊,
1 导入文本,规范属性
2 类似 Get-Process |sort-object -Property id |Out-GridView

另外,我说过,这种n行m列,的用excel处理起来很简单,
1 powershell导入数据.
2 用excel的分列功能
3 列排序.
作者: DAIC    时间: 2013-7-25 20:53

回复 5# PowerShell
  1. Get-Process |sort-object -Property id
复制代码
这个例子我看帮助手册的时候看到过,能明白。
问题是Get-Process的结果里面有 id 这个类似表头的属性。我的文本文件里面应该按照什么来规范属性呢?

另外,我说过,我们的服务器上不让随便安装软件,Office系列软件统统的没有。所以我才要学习PowerShell的。
作者: PowerShell    时间: 2013-7-25 21:10

本帖最后由 PowerShell 于 2013-7-25 21:13 编辑

服务器+powershell一般是这样的场景,win服务器+dns服务器+powershell+dns命令库。也就是服务器管理。

powershell+office处理服务器的数据,一般是这样的场景:服务器实际是客户端,而powershell+office+杂七杂八命令的客户端机子其实是数据处理服务器。


数据处理客户端通过ftp,sftp等。上传文件,或者文件中的某一行,到,powershell数据处理机子。这个数据处理机子处理完后,将返回这一行,或者这一个文件。
注意,powershell数据处理机,这个服务器,可以从win,linux,这些数据源【主动拉数据】回来处理,然后放回去。或者把结果存入数据库。
作者: DAIC    时间: 2013-7-25 21:22

回复 7# PowerShell


每个公司的情况不一样。总之我们公司的服务器没有office,个人电脑有office没有PowerShell,我们只能在服务器上处理数据。
能否先指点一下我的问题具体如何解决?
作者: PowerShell    时间: 2013-7-26 18:56

我跑厕所一蹲,才发现,没带手纸,家里也没有,我跑到小卖部一看也没有,跑到超市一看倒是有,但我却没带钱.你能否借给我个棍,让我用先
作者: ArdentMan    时间: 2013-7-26 19:35

这么恶心的人也能当版主?
起码的对人的尊重都没有,也能自诩为传教士?
作者: gawk    时间: 2013-7-26 19:46

回复 9# PowerShell


把你的PowerShell代码贴出来PK一下吧
C:\>sort.exe -k3,3n a.txt
Power BBB 1
Power DDD 2
Power CCC 3
Power AAA 10
作者: ArdentMan    时间: 2013-7-26 19:54

我来个批的:
  1. @Echo Off&SetLocal EnableDelayedExpansion
  2. For /F "Tokens=1-3" %%A In (A.txt) Do Set "Str=000000%%C"&Set "_!Str:~-7!=%%A %%B %%C"
  3. For /F "Tokens=2 Delims==" %%A In ('Set _') Do Echo %%A
  4. Pause>Nul
复制代码

作者: Spring    时间: 2013-7-27 14:00

论坛还是老样子啊,经常因为这些事情闹,每个人的价值观、正义感、智商、幽默感都不同,但胜利的总是“主流”。
作者: PowerShell    时间: 2013-7-27 19:59

自诩为传教士,有何不可? 亿万个传教士也不如上帝吧,上帝给了你电脑么?帮你交电费了么?免费给你装了os和处理任务的各种脚本工具么?


又没自诩你亲爹,何来不尊重?

我没有电脑没有电,没有dos没有批,我认为[学习从来不是主动的][你不用批填鸭我就是不尊重]
作者: Batcher    时间: 2013-7-29 20:23

这点小问题,东拉西扯一大堆,无法及时帮别人解决问题,传教效率太低了。
  1. get-content a.txt | sort-object {[int]$_.split()[2]}
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2