Como posso receber dados com alguns espaços e ignorar o bloco?

Como posso receber dados com alguns espaços e ignorar o bloco?

Estou tentando recuperar Local Address-port com número de porta em bloco diferente usado por cada endereço IP em Foreign Addresse PID/Program name) a partir do seguinte e armazená-lo em um arquivo:

Eu usei:

    netstat -natp | grep '^[a-z0-9P]*'

depois disso eu quero ignorar Recv-Qe Send-Qbloquear e pegar Local Addresscom seu número de porta e Foreign Addressdepois ignorar Statee pegar novamente PID/Program name.

Qual regexp será uma ajuda completa para mim? Além disso, será mais útil se eu conseguir manter os dois números de porta em blocos diferentes após cada endereço.

Isto é o que eu tenho:

$ netstat -natp | grep '^[a-z0-9P]*'
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.1:5939          0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:5432            0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:7071            0.0.0.0:*               LISTEN      -                   
tcp        0      0 192.168.42.157:37960    106.10.218.42:443       ESTABLISHED 21019/firefox       
tcp        0      0 192.168.42.157:35636    117.18.237.29:80        ESTABLISHED 21019/firefox       
tcp        1     32 192.168.42.157:40444    5.39.93.71:443          CLOSING     -                   
tcp        0      0 192.168.42.157:35626    52.27.200.224:443       TIME_WAIT   -                   
tcp        0      0 192.168.42.157:43004    122.252.255.200:80      ESTABLISHED 21019/firefox       
tcp        0      0 192.168.42.157:35734    117.18.237.29:80        TIME_WAIT   -                   
tcp        0      0 192.168.42.157:35776    52.27.200.224:443       TIME_WAIT   -                   
tcp        0      0 192.168.42.157:41690    54.182.1.219:443        ESTABLISHED 21019/firefox       
tcp        0      0 192.168.42.157:56472    54.182.0.97:443         ESTABLISHED 21019/firefox       
tcp        1     32 192.168.42.157:48390    198.252.206.25:443      CLOSING     -                   
tcp        0      0 192.168.42.157:37322    34.107.221.82:80        ESTABLISHED 21019/firefox       
tcp        0      0 192.168.42.157:57724    204.79.197.204:443      ESTABLISHED 21019/firefox       
tcp        0      0 192.168.42.157:43142    23.57.14.17:443         ESTABLISHED 21019/firefox       
tcp        0      0 192.168.42.157:46286    13.227.138.58:443       ESTABLISHED 21019/firefox       
tcp        0      0 192.168.42.157:55576    112.133.250.163:443     ESTABLISHED 21019/firefox       
tcp        0      0 192.168.42.157:52328    151.101.120.193:443     ESTABLISHED 21019/firefox       
tcp        0      0 192.168.42.157:35736    52.39.214.89:443        ESTABLISHED 21019/firefox       
tcp        0      0 192.168.42.157:57252    99.83.135.170:443       ESTABLISHED 21019/firefox       
tcp        0      0 192.168.42.157:48394    198.252.206.25:443      ESTABLISHED 21019/firefox       
tcp        0      0 192.168.42.157:45020    54.182.0.113:443        ESTABLISHED 21019/firefox       
tcp        0      0 192.168.42.157:50396    27.123.42.205:443       ESTABLISHED 21019/firefox       
tcp        1     32 192.168.42.157:48092    198.252.206.25:443      CLOSING     -                   
tcp        0      0 192.168.42.157:55798    142.250.192.99:80       TIME_WAIT   -                   
tcp        0      0 192.168.42.157:34190    157.240.16.52:443       ESTABLISHED 21019/firefox       
tcp        0      0 192.168.42.157:37320    34.107.221.82:80        ESTABLISHED 21019/firefox       
tcp        0      0 192.168.42.157:44806    54.87.110.85:443        ESTABLISHED 21019/firefox       
tcp        0      0 192.168.42.157:51202    103.229.10.173:443      ESTABLISHED 21019/firefox       

É isso que eu quero:

Prot Local Address PortofLocalA  Foreign Address  PortofForeignA  PID/Program name    

e todos os seus o/p abaixo dele

Responder1

Embora desajeitado, você pode tentar isto:

$ netstat -natp 2> /dev/null | awk 'NR==2 {printf("%s\t%s %s\t%s %s\t%s %s\n",$1,$4,$5,$6,$7,$9,$10)}
                                    NR>=3 {OFS="\t";print($1,$4,$5,$7)}'

EDITAR
... e, para fins de conclusão, se você precisar da coluna da porta separada de sua direção IP em sua saída final, poderá introduzir uma formatação mais refinada em awk, assim:

  $ netstat -natp 2>/dev/null | awk '
      NR==2 {printf("%s\t%8s %s\tPort\t%8s %s\tPort\t%s\n",$1,$4,$5,$6,$7,$9)} 
      NR>=3 {$8=$7;
             idx=match($5,":[^:]+$");
             $7=substr($5,idx+1);
             $6=substr($5,1,idx-1);
             idx=match($4,":[^:]+$");
             $5=substr($4,idx+1);
             $4=substr($4,1,idx-1);
             printf("%s\t%16s\t%s\t%16s\t%s\t%s\n",$1,$4,$5,$6,$7,$8)}
     '
  Proto      Local Address        Port     Foreign Address        Port    PID/Program
  tcp              0.0.0.0        22               0.0.0.0        *       -
  tcp            127.0.0.1        631              0.0.0.0        *       -
  tcp            127.0.0.1        25               0.0.0.0        *       -
  tcp              0.0.0.0        445              0.0.0.0        *       -
  tcp            127.0.0.1        12150            0.0.0.0        *       -
  tcp              0.0.0.0        139              0.0.0.0        *       -
  tcp            127.0.0.1        37580          127.0.0.1        12150   2962/firefox
  tcp            127.0.0.1        12150          127.0.0.1        40684   -
  [...]
  tcp            127.0.0.1        12150           127.0.0.1       47646   -
  tcp            127.0.0.1        12150           127.0.0.1       48982   -
  tcp            127.0.0.1        12150           127.0.0.1       1414   -
  tcp6                  ::        22                    ::        *       -
  tcp6                 ::1        631                   ::        *       -     
  tcp6                  ::        445                   ::        *       -     
  tcp6                  ::        139                   ::        *       -

Testado com Gawk (GNU Awk) v5.1.0, onde a saída de amostra acima é de uma caixa aleatória perto de mim.

As diferenças com minha resposta anterior são:

  • para os campos 4 e 5 de cada registro, verifique a posição ( idx) do último :caractere da string. O que vier depois disso é o porto. O início da string é o IP. Isso vale para strings IP IPv4 e IPv6. Isso é útil para separar o IP e o número da porta em 127.0.0.1:12345e também em, ::1:432por exemplo.
  • perder o OFS="\t"para especificar oseparador de campo de saídano segundo awkbloco e adicione larguras inteiras em locais apropriados entre %e snas printfstrings de formatação em ambos awkos blocos.

Responder2

Não é uma imagem perfeita, mas para começar:

perl -ae 'printf("%-6s%16s%7s%16s%7s %7s %s\n", $F[0], $F[3] =~ /(.*):(.*)/, 
$F[4] =~ /(.*):(.*)/, $F[6] =~ /(\d*)\/?(.*)/) if $. > 2'

Fora (cabeçalho adicionado após o fato):

Proto    Local-Address   Port  Remote-Address   Port     PID  Program-name
tcp    192.168.122.100     53         0.0.0.0      *          -
tcp           10.0.0.8     53         0.0.0.0      *          -
tcp          127.0.0.1   9321       127.0.0.1  45396          -
tcp           10.0.0.8  45454  123.123.123.25    443     484  firefox
tcp          127.0.0.1  36363       127.0.0.1   3639   23018  weechat
tcp           10.0.0.8  23232  123.232.123.25    443     484  firefox
tcp           10.0.0.8  13131   22.123.123.33   6667   23415  irssi
tcp           10.0.0.8  45586    52.42.50.123    443   20538  firefox
tcp6                ::     80              ::      *          -
tcp6                ::     22              ::      *          -
tcp6               ::1    631              ::      *          -
tcp6                ::     25              ::      *          -
tcp6                ::    443              ::      *          -
tcp6         127.0.0.1     80       127.0.0.1  46922          -

informação relacionada