Cómo ajustar el ancho de la columna en la salida del comando de Linux

Cómo ajustar el ancho de la columna en la salida del comando de Linux

Cuando utilicé este comando en Red Hat Linux

/usr/sbin/ss -i

Obtengo el siguiente resultado a continuación:

State       Recv-Q Send-Q                                            Local Address:Port                                                Peer Address:Port
ESTAB       0      0                                                    <IP_ADD:PORT>                                                  <IP_ADD:PORT>
         ts sack wscale:2,2 rto:204 rtt:4.5/6.5 ato:40 cwnd:3
ESTAB       0      0                                                    <IP_ADD:PORT>                                                  <IP_ADD:PORT>
         ts sack wscale:2,2 rto:213 rtt:13.875/18.5 ato:40
ESTAB       0      0                                                    <IP_ADD:PORT>                                                  <IP_ADD:PORT>
         ts sack wscale:2,2 rto:201 rtt:1.875/0.75 ato:40
ESTAB       0      0                                                    <IP_ADD:PORT>                                                 <IP_ADD:PORT>
         ts sack wscale:9,2 rto:201 rtt:1.875/0.75 ato:40

Cada vez que intento conectarme grepa ese comando ex:

/usr/sbin/ss -i | grep <SOME_IP_ADD>

tengo esta salida

ESTAB      0      0              <IP_ADD:PORT>           <IP_ADD:PORT>
ESTAB      0      0              <IP_ADD:PORT>           <IP_ADD:PORT>
ESTAB      0      0              <IP_ADD:PORT>           <IP_ADD:PORT>

Observe que grep no incluyó esto:

ts sack wscale:2,2 rto:204 rtt:4.5/6.5 ato:40 cwnd:3

porque está en otra línea. Entonces, ¿cómo ajusto el ancho de la columna cada vez que uso este comando u otros comandos de Linux? ¿Para que la salida no se ajuste de palabras ni pase a la siguiente línea? ¿Son sus mejores formas de hacer esto?

Respuesta1

Si tu grep lo tiene, prueba la -A1opción.

Parece que no se trata de ajustar, sino que la entrada está en una línea separada.

/usr/sbin/ss -i | grep -A1 <SOME_IP_ADD>

Mira Context Line Controlen man grep.

Una alternativa sería utilizar

-P Perl-regex 
-z suppress-newline
-o print only matching

como en:

ss -i | grep -Pzo '.*IPADDRESS.*\n.*'

Entonces no obtendrás los guiones circundantes que proporciona el contexto.


Una alternativa podría ser sed:

sed -n '/IPADDRESS/{N;p}'
# Or joining the two lines by:
ss -i | sed -n '/IPADDRESS/N;s/\n/ /p'

mal:

awk '/IPADDRESS/{print; getline; print}'
# Or as joined lines:
awk '/IPADDRESS/{printf "%s ", $0; getline; print}'

Respuesta2

La ts sack ...línea se coloca debajo de la ESTAB ...línea porque así es como sssiempre se formatea este tipo de información. No se está ajustando la línea. Puede incluir ambas líneas grepusando la -A1bandera:

ss -i | grep <IP ADDRESS> -A1

Puede combinar cada coincidencia en una línea pasándola mediante un sedcomando:

ss -i | grep <IP ADDRESS> -A1 | sed '/^--$/d;N;s/\n/ /g'

información relacionada