使用每行的第一个单词作为变量

时间:2017-05-11 10:32:22

标签: powershell text count

我有一个包含2行的文件,并希望将行的第一个单词设置为变量。搜索后我有以下脚本:

$contents = @(Get-Content C:\testfile.txt)

  foreach($line in $contents) {
  $s = $line -split ' '
  $var1 = $s[0]
  $var2 = $s[1]
  }

Write-Host "$var1"
Write-Host "$var2"

问题是$s[1]是第一行的第二个单词。如何让$var2成为第二行的第一个单词,依此类推?

2 个答案:

答案 0 :(得分:2)

你可能想告诉我们你取得了什么,这对我来说有点尴尬。但是,每次迭代只能设置一个变量。

我会使用-Begin cmdlet的Foreach-Object块来初始化一个计数器并在循环中增加它:

Get-Content 'C:\testfile.txt' | ForEach-Object -Begin {$i = 1} -Process {
    Set-Variable "var${i}" ($_ -split ' ')[0]
    $i++
}

如果你需要一种不那么动态的方法(如果真的只有两行),你可以使用它:

$content = Get-Content 'C:\testfile.txt'
$var1 = ($content[0] -split ' ')[0]
$var2 = ($content[1] -split ' ')[0]

答案 1 :(得分:0)

我采用了略有不同的方法,将第一个单词写到一个单独的数组($ firstword)中,然后遍历该数组以进行打印。这应该对所有文本文件通用。

$contents = @(Get-Content C:\testfile.txt)
$firstword = @()
  foreach($line in $contents) {
  $firstword += ($line -split ' ')[0]
  }
foreach($word in $firstword){
    Write-Host $word
    }
相关问题