2 votes

Recherche dans un fichier txt et impression du mot suivant d'une chaîne de caractères

J'ai un script batch script qui imprime la ligne entière de la chaîne de recherche dans un fichier texte.

   for %%i in (configure.txt) do (
   FINDSTR /C:"Widget Name=" %%i >> output.txt
   )

Voici à quoi ressemblera mon fichier Configure.txt :

   <Widget Name="example_1_new" Type="IFC"/>
   <Property Name="exmaple_2_old"/>
   <Content>
   <Widget Name="example_3_new"/>
   <Widget Name="example_4_old"/>
   <Widget Name="exmaple_1_new"/>
   </Content>

Je veux imprimer le mot suivant (exemple1) après le "Widget Name=" (Search String) et aussi trouver les doublons du mot (Exemple1) et imprimer son nombre à côté de lui, de sorte que ma sortie devrait être comme :

   example_1_new 2

Quelqu'un peut-il m'indiquer comment procéder ? Le fichier configure.txt contient environ 1000 lignes de données comme ci-dessus. Je viens de donner un exemple.

2voto

JosefZ Points 11907

Suivant commenté devrait faire l'affaire :

@ECHO OFF
SETLOCAL EnableExtensions DisableDelayedExpansion

rem delete auxiliary variables
for /F %%G in ('set ___ 2^>NUL') do set "%%G=" 

rem count up number of occurrences 
for /F tokens^=2^ delims^=^" %%G in ('
    FINDSTR /C:"Widget Name=" "configure.txt"
  ') do set /A "___%%G+=1"

rem subtract 1 to get number of duplicates
for /F "tokens=1,2 delims==" %%G in ('set ___ 2^>NUL') do set /A "%%G-=1"

REM output: does dot work if your data contains _ underscore
REM for /F "tokens=1,2 delims=_=" %%G in ('set ___ 2^>NUL') do echo %%G %%H

rem alternative output
for /F "tokens=1,2 delims==" %%G in ('set ___ 2^>NUL') do (
  set "_auxvarname=%%G"
  call set "_auxvarname=%%_auxvarname:~3%%"
  SETLOCAL EnableDelayedExpansion
    echo !_auxvarname! %%H
  ENDLOCAL
)

Pour créer un fichier de sortie, modifiez les dernières lignes comme suit :

rem alternative output
> output.txt (
    for /F "tokens=1,2 delims==" %%G in ('set ___ 2^>NUL') do (
      set "_auxvarname=%%G"
      call set "_auxvarname=%%_auxvarname:~3%%"
      SETLOCAL EnableDelayedExpansion
        echo !_auxvarname! %%H
      ENDLOCAL
    )
)

Sortie avec des données fusionnées à partir de original question et de mis à jour un :

==> type "configure.txt"
<Widget Name="example1"/>
<Property Name="exmaple2"/>
<Content Name="example3"/>
<Widget Name="example4"/>
<Widget Name="example1"/>
<Widget Name="example_1_new" Type="IFC"/>
<Property Name="exmaple_2_old"/>
<Content>
<Widget Name="example_3_new"/>
<Widget Name="example_4_old"/>
<Widget Name="exmaple_1_new"/>
</Content>

==> D:\bat\SU\1094786.bat
example1 1
example4 0
example_1_new 0
example_3_new 0
example_4_old 0
exmaple_1_new 0

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X