尝试使用PowerShell将tsv文件按一列排序

时间:2014-02-14 22:01:06

标签: sorting powershell

我有几个.tsv文件,我需要合并然后只按一列​​排序。不幸的是,该列以数字(无小数)表示,但长度不同。 我使用了以下脚本:

$a=get-content -path\*filename*.tsv -encoding ASCII
$a|sort-object [int]column1|select-object -first ($a.count - $fileCount)|out-file -filepath -encoding ASCII

不幸的是outfile仍未排序。有什么建议吗? P.S实际上它是在单个文件中排序的,但由于几个文件在变量$ a中合并,因此总输出没有排序。

2 个答案:

答案 0 :(得分:2)

啊,最好使用import-csv导入它们。试试这个:

gci *filename*.tsv|foreach{$a+=import-csv $_.fullname -delimiter "`t"}

现在你有一个数组,你可以按你想要的任何字段排序,并可以使用:

$a|convertto-csv -Delimiter "`t" -NoTypeInformation|select -Skip 1|Out-File  output.tsv

编辑删除标题输出。

答案 1 :(得分:0)

`未经测试。

$filename = 'c:\somedir\somefilename.tsv'
$ht=@{}
filter Get-Record { if ($ht[$_] -ne $HeaderLine) {$ht[$_]} }
$HeaderLine = $null
$counter = 0

get-content -path\*filename*.tsv -encoding ASCII |
 foreach { 
           if (-not $HeaderLine) 
             { $HeaderLine = $_ }

            $counter++

            $ht["$($_.split("`t")[1])$counter"] = $_                

         }

$HeaderLine | set-content $filename  #header
$ht.keys | Sort | Get-Record | add-content $filename

它应该对你在$_.split(" t“)数组中使用的任何列进行排序,