![Windows 上的 AWK 等效功能](https://linux22.com/image/1344476/Windows%20%E4%B8%8A%E7%9A%84%20AWK%20%E7%AD%89%E6%95%88%E5%8A%9F%E8%83%BD.png)
我需要排除客户端电脑上的一些问题,我无法在这些电脑上安装其他软件,并且需要awk
Windows XP 和 Windows 7 上的一些基本功能。
基本上,我需要从中删除进程 ID,netstat
以便可以在脚本的不同部分使用它,但不知道可以执行等效操作的本机命令awk '{ print $4 }'
。 有什么选择吗? 显然,我对 Windows CLI 还很陌生。
答案1
获取进程 ID (PID):
- 打开 cmd.exe 并输入:
tasklist /fi "imagename eq netstat.exe" > D:\test.txt
该命令将创建一个新的文本文件,其中包含 netstat 的进程 ID(如果 netstat 正在运行)。
问题是,该文件将包含的不仅仅是 PID。
也许这对你来说已经足够了?
答案2
对于这样的基本任务,你可以使用for /f
。
代替
command | awk '{ print $4 }'
尝试这个:
for /f "tokens=4" %a in ('command') do echo %a
请注意,您必须在批处理文件中使用%%a
而不是。%a
答案3
示例netstat -n -o
输出:
Active Connections
Proto Local Address Foreign Address State PID
TCP 127.0.0.1:12345 127.0.0.1:23456 ESTABLISHED 4321
TCP 127.0.0.1:34567 127.0.0.1:45678 ESTABLISHED 5432
要删除最上面的两行,请将输出传输到findstr /v "Active Proto"
。
要仅打印特定列的数据(例如本地地址和 PID),请使用:
for /f "tokens=2,5" %i in ('netstat -n -o ^| findstr /v "Active Proto"') do @echo Local Address = %i, PID = %j
如果在批处理文件中使用,则必须将 % 符号加倍,并将所需的值 (%%i、%%j 等) 分配给变量。
答案4
详细说明@Dennis 的回答,这是我用来从 C 头文件中提取版本号并用它来创建新文件名的片段。
我的头文件看起来像
... stuff
#define FIRMWARE 8
.. stuff
UNIX 的对应版本
f=`awk /FIRMWARE/ { print "image_v" $3 ".txt"; } project_config.`
echo $f
在 DOS 中
for /f "tokens=3" %%a in ('findstr FIRMWARE project_config.h') do (
set f=image_v%%a.txt
)
echo %f%