1

Мне нужно извлечь часть текста из текстового файла log.txt, где содержимое файла выглядит следующим образом.

 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                      

В частности, мне нужен SESSION ID конкретного имени пользователя. Нужна помощь в извлечении того же самого. Любой совет или помощь будут высоко ценится.

Благодарю.

2 ответа2

1

Следующий скрипт демонстрирует возможный подход с использованием извлечения части переменной (подстроки).

@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

Обратите внимание, что я абсолютно не уверен в правильности ширины столбцов, поскольку другой пример, приведенный в справочнике по командам query session показывает другой формат.
Тем не менее, ширина столбцов может быть вычислена из строки заголовка (но это превысит текущую тему вопроса).

0

Это похоже на данные фиксированной ширины, поэтому давайте используем GNU awk: пользователь "input2" имеет идентификатор "4"

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .