2017-01-15 7 views
0

Powershell линия:Правильный синтаксис? Ошибка Powershell для отсутствующих скобок, но только 6 скобок в команде?

(Get-Content hist3.txt) | ForEach-Object { $_.split(" ",2)[0]} | ForEach-Object { $rgbArray = @($_)} | for($i = 0; $i -le $rgbArray.length - 1; $i++) {$rgbArray[$i]} 

сообщение ERROR:

At line:1 char:114

  • ... " ",2)[0]} | ForEach-Object {$rgbArray = @($_)} | for($i = 0; $i -le...
  • ~ Missing closing ')' in expression. At line:1 char:150
  • ... y = @($_)} | for($i = 0; $i -le $rgbArray.length - 1; $i++) {$rgbAr...

  • ~ Unexpected token ')' in expression or statement.

    • CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
    • FullyQualifiedErrorId : MissingEndParenthesisInExpression

hist3.txt:

2 1388581 
3 1449812 
4 63829 
5 10477 
6 5878 
7 6703 
8 105349 
9 8639 
10 7270 
  1. Так я загрузке текстового файла: (Get-Content hist3.txt)
  2. Мне нужно изолировать первый wo е каждая строка: ForEach-Object { $_.split(" ",2)[0]}
  3. сохранить каждое первое слово в один массив: ForEach-Object { $rgbArray = @($_)}
  4. затем итераций по этому массиву и доступ к каждому элементу по одному: for($i = 0; $i -le $rgbArray.length - 1; $i++) {$rgbArray[$i]}

мой выше код, кажется, не хватает одного скобки как-то. или, возможно, он не распознает $ rgbArray позже в трубе?

Не могли бы вы рассказать мне, какую информацию мне не хватает или что нужно читать? Как мне это сделать?

Конечная цель - фактически загрузить элементы в массив, а затем сравнить несколько элементов с другими элементами в одном массиве. поэтому я бы сразу получил доступ к нескольким частям одного и того же массива.

Очень новый для powershell, так что спасибо за вашу помощь.

+0

Заявление (например, 'for') не может использоваться вместо команды конвейера. – PetSerAl

ответ

2

Вы ничего не можете направить в for. About For описывает, что это команда языка не является командлетом.

Трудно угадать вашу конечную цель. Для начала, попробуйте следующие фрагменты кода в последовательности, чтобы увидеть, что происходит:

Get-Content 'hist3.txt' 

затем

Get-Content 'hist3.txt' | ForEach-Object { $_.split(" ",2)[0]} 

, а затем

Get-Content 'hist3.txt' | ForEach-Object { $_.split(" ",2)[0]} | 
    ForEach-Object { 
     $rgbArray = @($_) 
     for($i = 0; $i -le $rgbArray.length - 1; $i++) {$rgbArray[$i]} 
    } 

Последняя такая же, как следующий однострочника:

(Get-Content 'D:\PShell\Downloaded\hist3.txt.txt') | ForEach-Object { $_.split(" ",2)[0]} | ForEach-Object { $rgbArray = @($_); for($i = 0; $i -le $rgbArray.length - 1; $i++) {$rgbArray[$i]}} 
+0

Спасибо за информацию. Я выбрал это как ответ, потому что он очень хорошо ответил на мой оригинальный вопрос. Однако массив не работает, как я ожидал. Я опубликовал новый вопрос, объясняющий результаты: http://stackoverflow.com/questions/41667798/array-is-storing-each-character-of-text-file-separately-instead-of-whole-words-w –

1
#you can do simply that: 
Import-Csv 'hist3.txt' -Delimiter ' ' -Header Col1, Col2 | select Col1 


#or this 
Get-Content 'hist3.txt' | %{ ($_ -split ' ')[0]} 
+0

Thank вы для комментария Import-Csv. Я не знал, что это возможно. Я думаю, что это будет очень полезно для меня в ближайшее время. –