¿Cómo puedo extraer datos con algunos espacios e ignorar el bloque?

¿Cómo puedo extraer datos con algunos espacios e ignorar el bloque?

Estoy intentando recuperar Local Address-port con el número de puerto en un bloque diferente utilizado por cada dirección IP en Foreign Addressy PID/Program name) de lo siguiente y almacenarlo en un archivo:

Solía:

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

después de eso quiero ignorar Recv-Qy Send-Qbloquear y tomar Local Addresscon su número de puerto y Foreign Addressluego ignorar Statey tomar nuevamente PID/Program name.

¿Qué expresión regular será de gran ayuda para mí? Además, será más útil si puedo mantener ambos números de puerto en bloques diferentes después de cada dirección.

Esto es lo que tengo:

$ 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       

Esto es lo que quiero:

Prot Local Address PortofLocalA  Foreign Address  PortofForeignA  PID/Program name    

y todo su o/p debajo de él

Respuesta1

Aunque es complicado, puedes probar esto:

$ 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
... y, para completar, si necesita que la columna del puerto esté separada de su dirección IP en su resultado final, puede introducir un formato más detallado en awk, así:

  $ 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                   ::        *       -

Probado con Gawk (GNU Awk) v5.1.0, donde el resultado de muestra anterior proviene de un cuadro aleatorio que se encuentra cerca de mí.

Las diferencias con mi respuesta anterior son:

  • para los campos 4 y 5 de cada registro, verifique la posición ( idx) del último :carácter de la cadena. Lo que venga después es el puerto. El comienzo de la cadena es la IP. Esto se aplica tanto a las cadenas de IP IPv4 como a IPv6. Esto es útil para separar la IP y el número de puerto en 127.0.0.1:12345y también en ::1:432, por ejemplo.
  • perder el OFS="\t"para especificar elseparador de campo de salidaen el segundo awkbloque y agregue anchos de números enteros en los lugares apropiados entre %y sen las printfcadenas de formato en ambos awkbloques.

Respuesta2

No es una imagen perfecta, pero como comienzo:

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

Fuera (encabezado agregado después del hecho):

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          -

información relacionada