Eu estava procurando por lista de arquivos abertos com base em processos Ips amd. eu usei o comando abaixo
for i in `sudo netstat -tulpna|awk '{print $5}'|grep -E "[0-9]{3}"|grep -v "^192\|10"|cut -f1 -d ":"`;do sudo netstat -tulpna|awk '/XXX.XXX.XXX.XXX/ {print $7}';done
26181/java
26181/java
26181/java
26181/java
26181/java
26181/java
26181/java
26181/java
26181/java
26181/java
26181/java
26181/java
Funciona bem se eu adicionar aspas simples e na condição awk /XXX.XXX.XXX.XXX/ eu der valor estático, ele imprimirá a 7ª coluna
Mas se eu usar aspas duplas e /$i/ variável
for i in `sudo netstat -tulpna|awk '{print $5}'|grep -E "[0-9]{3}"|grep -v "^192\|10"|cut -f1 -d ":"`;do sudo netstat -tulpna|awk "/$i/ {print $7}";done
tcp 0 0 XXX.XXX.XXX.XXX:443 XXX.XXX.XXX.XXX:62778 ESTABLISHED 26181/java
tcp 0 0 XXX.XXX.XXX.XXX:443 XXX.XXX.XXX.XXX:35708 ESTABLISHED 26181/java
tcp 0 0 XXX.XXX.XXX.XXX:443 XXX.XXX.XXX.XXX:40920 ESTABLISHED 26181/java
tcp 0 0 XXX.XXX.XXX.XXX:443 XXX.XXX.XXX.XXX:40918 ESTABLISHED 26181/java
tcp 0 0 XXX.XXX.XXX.XXX:443 XXX.XXX.XXX.XXX:31211 ESTABLISHED 26181/java
tcp 0 0 XXX.XXX.XXX.XXX:443 XXX.XXX.XXX.XXX:35708 ESTABLISHED 26181/java
tcp 0 0 XXX.XXX.XXX.XXX:443 XXX.XXX.XXX.XXX:40920 ESTABLISHED 26181/java
tcp 0 0 XXX.XXX.XXX.XXX:443 XXX.XXX.XXX.XXX:40918 ESTABLISHED 26181/java
tcp 0 0 XXX.XXX.XXX.XXX:443 XXX.XXX.XXX.XXX:31211 ESTABLISHED 26181/java
tcp 0 0 XXX.XXX.XXX.XXX:443 XXX.XXX.XXX.XXX:35708 ESTABLISHED 26181/java
tcp 0 0 XXX.XXX.XXX.XXX:443 XXX.XXX.XXX.XXX:40920 ESTABLISHED 26181/java
tcp 0 0 XXX.XXX.XXX.XXX:443 XXX.XXX.XXX.XXX:40918 ESTABLISHED 26181/java
tcp 0 0 XXX.XXX.XXX.XXX:443 XXX.XXX.XXX.XXX:31211 ESTABLISHED 26181/java
tcp 0 0 XXX.XXX.XXX.XXX:443 XXX.XXX.XXX.XXX:35708 ESTABLISHED 26181/java
tcp 0 0 XXX.XXX.XXX.XXX:443 XXX.XXX.XXX.XXX:40920 ESTABLISHED 26181/java
tcp 0 0 XXX.XXX.XXX.XXX:443 XXX.XXX.XXX.XXX:40918 ESTABLISHED 26181/java
tcp 0 0 XXX.XXX.XXX.XXX:443 XXX.XXX.XXX.XXX:31211 ESTABLISHED 26181/java
Quando deveria imprimir apenas a coluna 7. O que estou perdendo aqui
Seu
awk
roteiro:Aqui,
$7
é expandido pelo shell e provavelmente está vazio, resultando no comandoEm vez disso, você pode escapar do
$
in$7
do shell:Isso é bom em um
awk
script curto como este. Em um script mais complicado, provavelmente deve-se passar$i
paraawk
using-v variable="$i"
e usevariable
tomatch()
contra as linhas (ou use~
como αғsнιη mostra ).Você deve primeiro passar
$i
como variável defor ...;do ... ;done
para umaawk
variável e, em seguida, corresponder ao seu valor como um padrão como abaixo:consulte Passar variável de shell como um /padrão/ para o awk para mais informações.