powershell更快地读取和写入大数据到文本文件

时间:2014-10-23 08:50:48

标签: powershell

$m_point = Select-String -pattern  ",T," c:\temp\test\mt_point.txt
For ($x=0; $x -le $m_point.length; $x++)
#For ($x=0; $x -le 2; $x++)

{
    $s_point = $m_point[$x] -split ","
   $s_point = $s_point -replace ''''
  # echo $s_point[10]
   $point_ID=$s_point[2]+"."+$s_point[3]+"."+$s_point[4]+"."+$s_point[5]
   # echo $point_ID
        $Sel = Select-String  -pattern $point_ID -path $Location 
        $tp_point_stirng= $Sel-split ";"
      # echo $tp_point_stirng[6]
       # echo $tp_point_stirng[7]
        $tp_point_no=$tp_point_stirng[0]-split ":"
        $tp_point=$tp_point_no[3]-split ","
        #echo $tp_point[1]
   if($point_ID  -eq $tp_point_stirng[1])
   {
    if($s_point[6]-eq "T")
    {
        $Nis_point="!1!"+$tp_point[1]+"!"+$s_point[2]+ "!"+$tp_point_stirng[7]+"!0!SI!!"+$s_point[7]+"!!!!"+ $s_point[8]+"!"
        $Nis_point | out-file -filepath $fname_tag -Append 

    }
     if($s_point[9]-eq "T")
    {
        $Nis_point="!1!"+$tp_point[1]+"!"+$s_point[2]+ "!"+$tp_point_stirng[7]+"!2!AI!!"+$s_point[10]+"!!!!"+ $s_point[11]+"!"
        $Nis_point | out-file -filepath $fname_tag -Append 
    }
    if($s_point[12] -eq "T" -or $s_point[13] -eq "T")
    {
        if($s_point[14] -eq "F" -or $s_point[15] -eq "F")
        {
           $SDID_XDIS= "1"+","+$tp_point[1]+",0"
           $SDID_XDIS | out-file -filepath $fname_mu -Append 
        }
        if($s_point[14] -eq "T" -or $s_point[15] -eq "F")
        {
           $SDID_XDIS="1"+","+$tp_point[1]+",1"
           $SDID_XDIS | out-file -filepath $fname_mu -Append 
        }
        if($s_point[14] -eq "F" -or $s_point[15] -eq "F")
        {
           $SDID_XDIS= "1"+","+$tp_point[1]+",2"
           $SDID_XDIS | out-file -filepath $fname_mu -Append 
        }
        if($s_point[14] -eq "T" -or $s_point[15] -eq "T")
        {
           $SDID_XDIS= "1"+","+$tp_point[1]+",3"
           $SDID_XDIS | out-file -filepath $fname_mu -Append 
        }
    } 
    }
}

首先程序读取大约80000行数据,拆分行。

拆分对象,搜索文件,然后拆分对象,

搜索文件使用:$ Sel = Select-String -pattern $ point_ID -path $ Location

写文件:$ SDID_XDIS | out-file -filepath $ fname_mu -Append

完成写文本文件约1小时,非常慢。

我该怎么办?任何其他更快完成程序

1 个答案:

答案 0 :(得分:0)

使用Measure-Command查找哪些语句占用的时间最长。

话虽如此,代码包含两个明显的瓶颈。使用Select-String读取大文件将会表现不佳。请考虑使用ReadLine()中的System.IO.File。使用Add-Content逐行写入文件是另一个性能杀手。相反,请使用缓冲输出,例如来自StringBuilder的{​​{1}}。

System.Text的解析例程可能需要重写。考虑您多次检查相同的条件:

$SDID_XDIS