我有几个.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中合并,因此总输出没有排序。
答案 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“)数组中使用的任何列进行排序,