Windows 上的 AWK 等效功能

Windows 上的 AWK 等效功能

我需要排除客户端电脑上的一些问题,我无法在这些电脑上安装其他软件,并且需要awkWindows 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%

相关内容