我必须从这篇文章中解释的文本文件中提取列:
Extracting columns from text file using Perl one-liner: similar to Unix cut
但我必须在未安装Perl的Windows Server 2008中执行此操作。我怎么能用PowerShell做到这一点?任何想法或资源?我是PowerShell noob ......
答案 0 :(得分:13)
试试这个:
Get-Content test.txt | Foreach {($_ -split '\s+',4)[0..2]}
如果您希望这些列中的数据打印在同一行:
Get-Content test.txt | Foreach {"$(($_ -split '\s+',4)[0..2])"}
请注意,这需要-split
运算符的PowerShell 2.0。此外,,4
告诉split操作符您想要的最大分割字符串数,但请记住,最后一个字符串将始终包含所有附加内容。
对于固定宽度列,这里有一种方法,列宽等于7($ w = 7):
$res = Get-Content test.txt | Foreach {
$i=0;$w=7;$c=0; `
while($i+$w -lt $_.length -and $c++ -lt 2) {
$_.Substring($i,$w);$i=$i+$w-1}}
$ res将包含所有行的每列。要设置最大列,请将$c++ -lt 2
从2更改为其他内容。可能有一个更优雅的解决方案,但现在没有时间去思考它。 : - )
答案 1 :(得分:5)
假设这个代码应该用空格分隔。
$fileName = "someFilePath.txt"
$columnToGet = 2
$columns = gc $fileName |
%{ $_.Split(" ",[StringSplitOptions]"RemoveEmptyEntries")[$columnToGet] }
答案 2 :(得分:1)
普通,
type foo.bar | % { $_.Split(" ") | select -first 3 }
答案 3 :(得分:0)
试试这个。如果需要,这将有助于跳过初始行,提取/遍历列,编辑列数据并重建记录:
Deploy FAILED