extrair parte do texto do cmd

1

Eu preciso extrair uma parte do texto de um arquivo de texto log.txt, onde o conteúdo do arquivo é o seguinte.

 SESSIONNAME       USERNAME                 ID  STATE   TYPE        DEVICE 
services                                    0  Disc                        
console                                     1  Conn                        
                   input1                   3  Disc                        
 rdp-tcp#0         input2                   4  Active  rdpwd               
                   input3                   6  Disc                        
 rdp-tcp                                 65536  Listen                      

Especificamente, preciso do ID da SESSÃO de um nome de usuário específico. Precisa de ajuda para extrair o mesmo. Qualquer conselho ou ajuda será muito apreciado.

Obrigado.

    
por Nikhil Kumar 12.11.2015 / 13:10

2 respostas

1

O próximo script mostra a possível abordagem usando extrair parte de uma variável (substring) .

@ECHO OFF >NUL
SETLOCAL EnableExtensions EnableDelayedExpansion
for /F "usebackq delims=" %%G in ("D:\test\QuerySessionLog.txt") do (
  set "logline=%%~G"
  set "_SESSIONNAME=!logline:~0,18!"
  set "_USERNAME=!logline:~18,18!"
  set "_ID=!logline:~36,11!"
  set "_STATE=!logline:~47,8!"
  set "_TYPE=!logline:~55,7!"
  set "_DEVICE=!logline:~62!"

  echo !logline!
  for /F "tokens=1,* delims==" %%g in ('set _') do (
    set "trimentry=%%h"
    if "!trimentry:~0,1!"==">" (
      call :TRIM !trimentry:~1!
    ) else (
      call :TRIM !trimentry!
    )
    echo %%g=[!trimresult!] ^(raw=[%%h]^) 
  )
  echo( 
) 
:endlocal
ENDLOCAL
goto :eof

:TRIM
  SET "trimresult=%*"
GOTO :EOF

Por favor, note que eu absolutamente não tenho certeza sobre a exatidão das larguras das colunas como outro exemplo fornecido em query session referência de comando mostra outro formato. No entanto, as larguras das colunas podem ser computáveis a partir da linha de cabeçalho (mas isso excederia o tópico atual da questão).

    
por 13.11.2015 / 12:47
0

Isso parece com dados de largura fixa, então vamos usar o GNU awk: o usuário "input2" tem o id "4"

$ gawk -v FIELDWIDTHS="19 25 3 99" -v user=input2 '$2 ~ "^"user {print $3}' log.txt
4  
    
por 12.11.2015 / 16:56