首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >坚持使用此PS脚本

坚持使用此PS脚本
EN

Stack Overflow用户
提问于 2019-05-20 09:30:33
回答 1查看 124关注 0票数 -1

我有一个文本文件,其中包含数百万条记录,我想从不是以字符串+行号开头的每一行中查找(字符串以双引号01/01/2019开头)

你能帮我修改这段代码吗?

代码语言:javascript
复制
Get-Content "(path).txt" | Foreach { if ($_.Split(',')[-1] -inotmatch "^01/01/2019") { $_; } }

谢谢

EN

回答 1

Stack Overflow用户

发布于 2019-05-20 10:56:20

根据您的注释,内容将类似于数组。因此,您希望读取内容,对其进行过滤,并从该内容中获得结果行:

代码语言:javascript
复制
# Get the content

# $content = Get-Content -Path 'pathtofile.txt'
$content = @('field1,field2,field3', '01/01/2019,b,c') 

# Convert from csv
$csvContent = $content |  ConvertFrom-Csv 

# Add your filter based on the field
$results = $csvContent | Where-Object { $_.field1 -notmatch '01/01/2019'}  | % { $_ }

# Convert your results back to csv if needed
$results | ConvertTo-Csv

如果性能是个问题,那么.net将像PowerBi一样使用CsvHelper处理数以百万计的记录。

代码语言:javascript
复制
# install CsvHelper 
nuget install CsvHelper

# import csvhelper 
import-module CsvHelper.2.16.3.0\lib\net45\CsvHelper.dll

# write the content to the file just for this example
@('field1,field2,field3', '01/01/2019,b,c') | sc -path "c:\temp\text.csv"

$results = @()
# open the file for reading 
try {
$stream = [System.IO.File]::OpenRead("c:\temp\text.csv")
$sr = [System.IO.StreamReader]::new($stream)
$csv = [CsvHelper.CsvReader]::new($sr)

# read in the records
while($csv.Read()){
    # add in the result 
    $result= @{}     

    [string] $value = "";

    for($i = 0; $csv.TryGetField($i, [ref] $value ); $i++) {
        $result.Add($i, $value);
    }
    # add your filter here for the results
    $results.Add($result)
}
# dispose of everything once we are done
}finally {

    $stream.Dispose();
    $sr.Dispose();
    $csv.Dispose();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56213391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档