powershell - 从分隔的文本文件中删除标题

标签 powershell text delimited-text

我有一些文本文件,其中的数据由正斜杠分隔。将其导入并将其输入到自定义对象中非常容易,但是文件具有包含定界符的 header 。下面的例子:

HEADER LINE 1/INFO/MOREINFO
HEADER LINE 2/INFO/MOREINFO
HEADER LINE 3/INFO/MOREINFO
HEADER LINE 4/INFO/MOREINFO
HEADER LINE 5/INFO/MOREINFO
HEADER LINE 6/INFO/MOREINFO
HEADER LINE 7/INFO/MOREINFO

LINE1A/1B///1E/1F/1G/1H
LINE2A/2B/2C//2E//2G/2H
...
/END/

The lines "LINE1A", "LINE1B", etc. have the data I need to import. Using -split '/' lets me split everything into a nice array, but only if that header's not there.

$data = (Get-Content text.txt).Replace('Line', '/Line') -split('/')

如果存在 header ,则$data数组中的第一个元素包括 header 。

我尝试了字符串操作技巧,但是不幸的是,标题文本从一个文件到下一个文件并不一致。行数(总是7)和斜杠数(每标题行2)是一致的,但是每行中的文本都不同。

由于Get-Content产生的数组拆分为回车符(如果我错了,请纠正我),尽管我可以删除前7个数组元素。此代码可删除第一个元素:
$data = (Get-Content text.txt) 
$data = $data | Where-Object {$_ -ne $data[0]}

但这不是很可扩展。我不想循环命令7次。有没有更优雅的方法可以做到这一点?也许一些基于回车和/或斜杠的正则表达式?

最佳答案

简单的内容,请使用Select-Object cmdlet跳过前7行!

$data = (Get-Content text.txt | Select -Skip 7).replace('Line','/Line') -split('/')

如果第8行上有空白行,您可能要跳过前8行。

关于powershell - 从分隔的文本文件中删除标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45825065/

相关文章:

R data.table 文本解析

java - 无法使用JDBC解析文件

events - 是否可以将事件附加到 PSObject?

powershell - 如何在powershell中获取cmdlet的所有别名?

list - 使用列表作为变量的 Powershell 命令

sql-server - 如何将文本分隔文件导入SQL数据库?

transformation - 是否有描述平面文件的标准格式?

php - 如何将投票按钮限制为 'To' 地址而不是通过 powershell 在 outlook 中发送到 'Cc'?

c++ - 在 C++ 中格式化文本

algorithm - 在较小的字符串中查找大量字符串中的所有匹配项