我需要从文本文件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。需要帮助提取该 ID。任何建议或帮助都将不胜感激。
谢谢。
答案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
命令参考显示另一种格式。
但是,列宽可以从标题行计算出来(但这超出了当前问题的主题)。
答案2
这看起来像是固定宽度的数据,所以让我们使用 GNU awk:用户“input2”的 ID 为“4”
$ gawk -v FIELDWIDTHS="19 25 3 99" -v user=input2 '$2 ~ "^"user {print $3}' log.txt
4