【问题标题】:powershell csv select every nth linepowershell csv每第n行选择一次
【发布时间】:2015-06-25 22:26:06
【问题描述】:

我正在使用 Powershell 处理包含坐标值行的 CSV 文件。

第 1 行和第 2 行是弧度,我已将其转换为 Lat Long 值。

我想出了下面的脚本。

我的问题是我不想要每一行 - 它太多了。我想每 1000 行提取一次。

foreach ($FileName in get-item $dir\*.* -include test1.csv )
{
$FilenameNP = $Filename | select  -expand BaseName
Write-Host $FilenameNP
Write-Output "Latitude,Longitude,Altitude,TimeSeconds,LatitudeRadians,LongitudeRadians,AltitudeMeters,x velocity meters/second ,y velocity meters/second ,z velocity meters/second ,Roll radians ,Pitch radians ,platform heading radians ,wander angle radians ,x body acceleration meters/second2 ,y body acceleration meters/second2 ,z body acceleration meters/second2 ,x body angular rate radians/second ,y body angular rate radians/second ,z body angular rate radians/second " > $dir\Sbet_$FilenameNP.txt


$Content = get-content $Filename

Write-host $Content


foreach ($Line in $Content)
    {
    $Latitude=$null
    $Longitude=$null
    $Line=$Line -replace '\s+',''
    $LineS=$Line  -split ","
    $Latitude=([decimal]$LineS[1]*180/[math]::pi)
    $Longitude=([decimal]$LineS[2]*180/[math]::pi)
    $Altitude=$LineS[3]
    Write-Host $Latitude $Longitude $Altitude

    write-Output "$Latitude,$Longitude,$Altitude,$Line" >> $dir\Sbet_$FilenameNP.txt

  }
}

数据如下所示:

385278.0020318,     -0.6458227,      3.0509169,     39.0372952,      0.0044346,      0.0046028,
385278.0070309,     -0.6458227,      3.0509169,     39.0373095,      0.0036458,      0.0019423,
385278.0120310,     -0.6458230,      3.0509170,     45.1586564,      0.0025192,     -0.0011160,
385278.0170301,     -0.6458230,      3.0509170,     45.1586851,      0.0013969,     -0.0034220,
385278.0220292,     -0.6458230,      3.0509170,     45.1587176,      0.0002427,     -0.0041081,
385278.0270284,     -0.6458230,      3.0509170,     45.1587510,     -0.0006602,     -0.0027870,
385278.0320285,     -0.6458230,      3.0509170,     45.1587844,     -0.0012237,     -0.0001119,

【问题讨论】:

    标签: csv powershell


    【解决方案1】:

    如果您不想要每一行,请不要遍历每一行...使用For 循环并让它在您想要提取的任何行数处进行迭代...

    foreach ($FileName in get-item $dir\*.* -include test1.csv )
    {
        $FilenameNP = $Filename | select  -expand BaseName
        Write-Host $FilenameNP
        Write-Output "Latitude,Longitude,Altitude,TimeSeconds,LatitudeRadians,LongitudeRadians,AltitudeMeters,x velocity meters/second ,y velocity meters/second ,z velocity meters/second ,Roll radians ,Pitch radians ,platform heading radians ,wander angle radians ,x body acceleration meters/second2 ,y body acceleration meters/second2 ,z body acceleration meters/second2 ,x body angular rate radians/second ,y body angular rate radians/second ,z body angular rate radians/second " > $dir\Sbet_$FilenameNP.txt
    
        $Content = get-content $Filename
    
        Write-host $Content
        For($i = 0;$i -lt $Content.count;$i=$i+1000){
            $Latitude=$null
            $Longitude=$null
            $Line=$Content[$i] -replace '\s+',''
            $LineS=$Line  -split ","
            $Latitude=([decimal]$LineS[1]*180/[math]::pi)
            $Longitude=([decimal]$LineS[2]*180/[math]::pi)
            $Altitude=$LineS[3]
            Write-Host $Latitude $Longitude $Altitude
    
            write-Output "$Latitude,$Longitude,$Altitude,$Line" >> $dir\Sbet_$FilenameNP.txt
        }
    }
    

    【讨论】:

      【解决方案2】:
      $counter = 0
      Foreach ($Line in $Content)
      {
          $counter++
          if($counter -ne 10000) {continue}        
          $counter = 0
      
          # Proceed as normal here
          $Latitude=$null
          $Longitude=$null
          ... etc
      }
      

      【讨论】:

        猜你喜欢
        • 2021-09-09
        • 2022-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-29
        • 1970-01-01
        相关资源
        最近更新 更多