2017-12-21 13 views
0

私は多くの行を含むCSVファイルを持っており、テキストを<STR_0.005_Long>,µm,5.000µmの間に入れたいと思っています。 CSVから2単語間でテキストを見つけてtxt.fileにエクスポートするには

例ライン:

 
Straightness(Up/Down) <STR_0.005_Long>,4.444µm,5.000µm,,Pass,‌​2.476µm,1.968µm,25,0‌​.566µm,0.720µm 

これは私が記述しようとしていますスクリプトです:

$arr = @() 
$path = "C:\Users\georgi\Desktop\5\test.csv" 
$pattern = "(?<=.*<STR_0.005_Long>,)\w+?(?=µm,5.000µm*)" 
$Text = Get-Content $path 
$Text.GetType() | Format-Table -AutoSize 

$Text[14] | Foreach { 
    if ([Regex]::IsMatch($_, $pattern)) { 
     $arr += [Regex]::Match($_, $pattern) 
     Out-File C:\Users\georgi\Desktop\5\test.txt -Append 
    } 
} 
$arr | Foreach {$_.Value} | Out-File C:\Users\georgi\Desktop\5\test.txt -Append 
+0

リンクをリンクする代わりにサンプルデータで質問を更新してください。 (あなたが投稿したリンクにアクセスすることはできず、とにかくそれをダウンロードする危険はありません) –

+0

ストレート(上/下)、4.444μm、5.000μm,,合格、2.476μm、1.968μm、25、 0.566μm、0.720μm これは行です –

答えて

1

は、正規表現と単に出力にマッチしてWhere-Objectフィルタを使用します出力ファイル:

Get-Content $path | 
    Where-Object { $_ -match $pattern } | 
    ForEach-Object { $matches[0] } | 
    Out-File 'C:\Users\georgi\Desktop\5\test.txt' 

もちろん、あなたはCSVを持っているので単にImport-Csvを使用し、その特定の列の値をエクスポートします。

Import-Csv $path | Select-Object -Expand 'column_name' | 
    Out-File 'C:\Users\georgi\Desktop\5\test.txt' 

は、列の実際の名前でcolumn_nameを交換してください。 CSVに列ヘッダーがない場合は、-Headerパラメーターで指定することができます。

Import-Csv $path -Header 'col1','col2','col3',... | 
    Select-Object -Expand 'col2' | 
    Out-File 'C:\Users\georgi\Desktop\5\test.txt' 
+0

私が使用する場合 Import-Csv $パス - ヘッダー 'col1'、 'col2'、 'col3'、... | Select-Object -Expand 'col2' | アウトファイル 'C:\ Users \ georgi \ Desktop \ 5 \ test.txt' アウトファイルには私のmeny特性があります。私はほしいと思う4.444 –

+0

インポートの後にフィルターを入れなさい: '... | Where-Object {$ _。col2 -eq '4.444} | ... –

+0

私は以下のスクリプトでそれを行いました: $ path = "C:\ Users \ georgi \ Desktop \ 5 \ test.csv" $ X = Get-Content $ path | -Index 14を選択します。 $ A = $ X.Substring(43,5) $ B = $ B = "000" + $ A + "0" |セットコンテンツ - パス( 'C:\ Users \ georgi \ Desktop \ 5 \ test.txt') –

関連する問題