Sorting 尝试使用powershell按一列对tsv文件进行排序

Sorting 尝试使用powershell按一列对tsv文件进行排序,sorting,powershell,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 不幸的是,输出文件仍然没有排序。有什么建议吗? P.S实

我有几个.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
不幸的是,输出文件仍然没有排序。有什么建议吗?
P.S实际上它是在单个文件中排序的,但是由于几个文件合并在变量$a中,所以总输出没有排序。

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

gci *filename*.tsv|foreach{$a+=import-csv $_.fullname -delimiter "`t"}
现在,您有了一个数组,可以根据需要的任何字段进行排序,并且可以使用:

$a|convertto-csv -Delimiter "`t" -NoTypeInformation|select -Skip 1|Out-File  output.tsv
编辑以删除标题输出。

`未测试

$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

它应该根据您使用的
$\uu.split(“
t”)`数组中的任何列进行排序,

唯一的一点是数组中的每个条目都有列标题,我需要在输出文件中删除所有这些标题。并且不会因为头文件的存在而重新开始对每个文件进行排序,我只需要对最终的输出文件进行排序。再一次,列本身可能有不同的长度:8-9-10你试过我的代码了吗?你看到的有什么问题吗?列长度应该无关紧要,如果它们是真正的制表符分隔值,它将正确地找到这些值。假设所有文件都有相同的列标题,它将构建一个大数组,您可以将其输出到一个带有一行标题的文件中。只是想了解一下,output.tsv文件将具有一个头的已排序文件?需要去掉标题alsoAnswer更新,它将不再输出标题行,所以您只需要获取数据。您正在读取的文件是否有标题行?如果没有,这将无法工作,因为导入CSV将无法正常工作,因为它现在已写入。尝试分步骤在其中运行。gci命令产生以下错误:是否应更早定义$HeaderLine?获取错误无法检索变量“$HeaderLine”,因为尚未设置该变量。$HeaderLine应通过读取第一个文件的第一行进行设置。不幸的是,该变量因我描述的错误而失败。当我通过列出所有列来物理定义标题时,它起作用了,但我不应该这样做。最大的问题是,速度非常慢。处理不到10个文件需要35分钟。它们相当大。有什么改进性能的建议吗?或者我应该转到vb.net吗?听起来你有严格的模式设置。在将$HeaderLine用于IF测试之前,我添加了一行来定义它。至于加快速度,我需要更多地了解数据。您要排序的字段对于每个记录都是唯一的吗?如果没有,是否会有相对较多或较少的具有相同值的记录?是的,我设置了严格模式。似乎它正在与这个小调整一起工作。至少就我所知,排序字段应该是唯一的。文件数量接近100个,每个文件大约有150000条记录。栏目数量相当可观,超过60个。我假设我可以在($ht.keys | sort)-notmatch$HeaderLine | Get Record之后添加file-filepath$filename-encoding ASCII命令?