Funcionalidade equivalente do AWK no Windows

5

Preciso solucionar alguns problemas em um PC cliente que não consigo instalar software adicional e preciso de algumas funcionalidades básicas de awk no windows xp & 7.

Basicamente, eu preciso remover o ID do processo de netstat para que eu possa usá-lo em diferentes partes de um script, mas não tenha conhecimento de um comando nativo que possa fazer o equivalente a awk '{ print $4 }' . Existem algumas opções para mim? Obviamente, sou muito novo no windows cli.

    
por Grambot 27.12.2012 / 16:48

4 respostas

2

Para obter o ID do processo (PID):

  • abra cmd.exe e digite:
  • tasklist /fi "imagename eq netstat.exe" > D:\test.txt

Esse comando criará um novo arquivo de texto com o ID do processo do netstat (se o netstat estiver em execução). O problema é que esse arquivo conterá mais do que apenas o PID.

Talvez seja o suficiente para você começar?

    
por 27.12.2012 / 17:16
10

Para tarefas básicas como essa, você pode usar for /f .

Em vez de

command | awk '{ print $4 }'

tente isto:

for /f "tokens=4" %a in ('command') do echo %a

Observe que você precisa usar %%a em vez de %a em arquivos em lote.

    
por 27.12.2012 / 17:18
4

Amostra netstat -n -o output:

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

Para remover as duas linhas principais, direcione a saída para findstr /v "Active Proto" .

Para imprimir apenas dados específicos da coluna, por exemplo, o Endereço Local e o PID, use:

for /f "tokens=2,5" %i in ('netstat -n -o ^| findstr /v "Active Proto"') do @echo Local Address = %i, PID = %j

Se estiver usando um arquivo em lote, você terá que dobrar os sinais% e pode atribuir os valores desejados (%% i, %% j) às variáveis.

    
por 27.12.2012 / 17:19
1

Elaborando a resposta de @ Dennis, aqui está um trecho que eu usei para extrair um número de versão de um arquivo de cabeçalho C, e usá-lo para criar um novo nome de arquivo.

Meu arquivo de cabeçalho parece

 ... stuff
 #define FIRMWARE 8
 .. stuff

O equivalente do UNIX

 f='awk /FIRMWARE/ { print "image_v" $3 ".txt"; } project_config.'
 echo $f

no DOS é

 for /f "tokens=3" %%a in ('findstr FIRMWARE project_config.h') do (
   set f=image_v%%a.txt
 )

 echo %f%
    
por 13.11.2013 / 19:48