Question Garder deux lignes spécifiques et leurs ligne suivante

Plus d'informations
il y a 1 an 11 mois - il y a 1 an 11 mois #32285 par Zamboni
Bonjour,
Dans des fichiers (log.rpt) sous forme de texte, j'essaye de faire un script qui:
- Sélectionne une ligne spécifique avec un mot clé (Y)
- Garde la ligne suivante(Y+1)
- Supprime tout ce qui se trouve entre Y+1 et la prochaine ligne contenant un autre mot clé (Z)
- Garde aussi la ligne suivante (Z+1).
- Supprime ce qui se trouve après Z+1


Ce qui donnerait:
AVANT

11 rows selected.
11 rows selected.
11-05-2022 06:00:01     <-- Y
17 rows selected.             <-- Y+1
14 rows selected.
28 rows selected.
47 rows selected.
21 rows selected.
37 rows selected.
21 rows selected.
11-05-2022 21:00:01    <-- Z
37 rows selected.           <-- Z+1
21 rows selected.

APRÈS

11-05-2022 06:00:01        <-- Y
17 rows selected.                <-- Y+1
11-05-2022 21:00:01        <-- Z
37 rows selected.               <-- Z+1


Pour détailler:
- Les logs journalier varient de 1700 à 7000 lignes chaque jour, mon script actuel l'épure à une 60aines.
- J'essaye d'isoler ces 4 lignes, afin de sortir le texte en .csv et l'importer dans un tableur Excel (qui recensera chaque jour de façon automatique)
- Le nombre de lignes entre Y+1 et Z est aléatoire.

Mon scripte actuel:
$date = '11-05-2022'
Get-Content C:\Users\zambonis\EXL\Logirpt\Decon_CarPre$date.rpt |
Where-Object {$_ -match 'rows selected|06:00|21:00'} |
Where-Object {$_ -notmatch 'no rows selected'} |
Set-Content C:\Users\zambonis\EXL\Logitxt\Decon_CarPre$b.txt |

#Set-Content C:\Users\zambonis\EXL\Logicsv\Decon_CarPre$date.csv

J'ai fait beaucoup de recherches et d'essais, mais la je bloque depuis un moment.
Merci d'avance pour vos réponses
 
Dernière édition: il y a 1 an 11 mois par Zamboni. Raison: Mise en forme

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 1 an 11 mois #32286 par Laurent Dardenne
Salut,
une possibilité avec Select-String :
$r=select-string -Path c:\temp\datas.txt -Pattern '^\d\d-\d\d-\d\d\d\d ' -Context 1
$r[0].line
$r[0].Context.PostContext
Ton code contient le cas 'no rows selected' mais pas les données d'exemple.

Tutoriels PowerShell
Les utilisateur(s) suivant ont remercié: Zamboni

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 1 an 11 mois #32289 par Zamboni
Merci beaucoup,
Select-string -contexte était bien la solution,
Je l'ai adapté pour ne garder qu'une seule ligne en post-context 
cls
$date = '11-05-2022'
$a = Get-Content C:\Users\zambonis\EXL\Logirpt\Decon_CarPre$date.rpt |
#Epurer le log, ne garder que 6h, 21h et les rows >1
Where-Object {$_ -match 'rows selected|06:00|21:00'} |
Where-Object {$_ -notmatch 'no rows selected'} |

#Garder une ligne après 6h une ligne après 21h
Select-string -Pattern "06:00|21:00" -Context 0,1

#Mise en forme
$b = $a -replace '>',' ' |
Set-Content C:\Users\zambonis\EXL\Logicsv\Decon_CarPre$b.csv

Résultat:

  11-05-2022 06:00:01 
  17 rows selected.
  11-05-2022 21:00:01
​​​​​​​37 rows selected.

Merci encore, bonne journée :) 
 

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.069 secondes
Propulsé par Kunena