【发布时间】:2017-12-08 22:47:23
【问题描述】:
我需要从文本文件中读取一些数据并生成 CSV。
我正在使用这个 PowerShell 脚本来获取数据
$PAGE = Get-Content .\DATA.txt | ForEach-Object {
New-Object PSObject -Property @{
FIELD1 = [regex]::Matches($_, '^[^\:]*[^\.txt:]').Value
FIELD2 = [regex]::Match($_, 'DATA').Value
FIELD3 = [regex]::Match($_, 'DATA\s(.+)').Value
FIELD4 = [regex]::Match($_, 'DATA\s(\S*)\s(\S*)\s(\S*)\s(\S*)\s(\S*)\s(\S*)\s(\S*)\s(\S*)\s')
}
}
$PAGE | Select-Object FIELD1, FIELD2, FIELD3, FIELD4 |
Export-Csv DATA.csv -NoTypeInformation
正则表达式可以测试here。示例输入:
file1.txt:数据 46546 TEST1 EUIRWY 283746827 2 1 3 3 file2.txt:数据 96873 TEST2 KJH-ASKDJH 928374 0 0 0 0上述脚本对给定数据的输出如下:
字段1 |字段2 |字段3 | FIELD4 文件1 |数据 |数据 46546 TEST1 EUIRWY 283746827 2 1 3 3 | FIELD4 文件2 |数据 |数据 96873 TEST2 KJH-ASKDJH 928374 0 0 0 0 | FIELD4但预期的输出是这样的。
字段1 |字段2 |字段3 | FIELD4 文件1 |数据 | D1 | 46546 文件1 |数据 | D2 |测试1 文件1 |数据 | D3 | EUIRWY 文件1 |数据 | D4 | 283746827 文件1 |数据 | D5 | 2 文件1 |数据 | D6 | 1 文件1 |数据 | D7 | 3 文件1 |数据 | D8 | 3 文件2 |数据 | D1 | 96873 ................................... ................................... ..........所以没有 8 次Field4 基本上总是有 8 个字符串或数字 FIELD1 应该是文件名 8 次 FIELD2 也将出现 8 次 'DATA' 并且 FIELD3 将始终遵循这个序列 D1....D8。对 DATA.TXT 文件中的每一行都要重复相同的操作。所以在示例中,我取了 2 行作为 file1.txt 和 file2.txt。
我想不出应该如何进行。因为我想在脚本中使用类似的方法,因为它是我的主脚本的一部分,为了统一起见,我想尽可能使用这种方法。
【问题讨论】:
-
请提供示例输入。
-
@Ansgar Wiechers 测试字符串已经存在link
-
请在您的问题中提供与您的问题相关的所有内容。我不太愿意去其他地方回答你的问题。
标签: regex powershell csv