PowerShell получить подстроку в два шаблона в отдельном файле - PullRequest
1 голос
/ 17 марта 2020

Я прочитал много тем, но не решил свою проблему, поэтому создал новую топи c.

У меня есть следующие файлы:

Файл 1:

1
2
3
ABS START
4
5
6

Файл 2:

7
8
9
ABS END
10
11
12

Я хочу получить контент между ABS START - ABS END. Поскольку они находятся в разных файлах, поэтому следующая команда не работает

$content = get-content -raw file*.txt | select-string -allmatches '(?smi)ABS START.*ABS END' 
$content.matches | foreach {$_.value}

Использование для l oop для чтения построчно кажется невозможным. потому что весь файл более 2 миллионов строк. Я пытался таким образом, но это заняло несколько дней, но не окончательно sh.

Это мой код для l oop. Он может работать с несколькими файлами, но когда я запускаю для всех файлов, кажется, что я не могу закончить sh

$Log = type file*
for ($i=1; $i -le $Log.Count; $i++){
   $Line = $Log[$i]
   if($Line -match "ABS START"){
      for ($j = $i; $j -le $Log.Count; $j++){
         $LineJ = $Log[$j]
         if($LineJ -match "ABS END"){
            $i = $j
            break
         }
         else{
            $Log[$j] >> $Result   
         }
      }
   }
}

Нужна ваша помощь, спасибо всем

Ответы [ 2 ]

0 голосов
/ 19 марта 2020

Я видел ваше решение, и у меня есть другая идея для вас:

$temp = get-content file*.txt
$begin = $temp.indexof("ABS Start")
$end = $temp.indexof("ABS End")

Теперь попробуйте:

$temp[$begin..$end]

Надеюсь, это поможет 100

0 голосов
/ 19 марта 2020

Наконец, я обдумал решение.

Я прочитаю каждую строку каждого файла и запишу содержимое во временный файл

Если содержимое строки = "ABS START", тогда очистите содержимое временного файла

Если содержимое строки = "ABS END", добавьте содержимое временного файла в выходной файл.

Таким образом, потребуется всего 1 л oop, весь файл обработан через 30 минут.

Кстати, кто-нибудь может научить меня, как закрыть вопрос?

...