2 votos

¿Cómo mover cadenas contenidas en los resultados de `nettop` usando un editor de texto?

Usando sed, awk, ed, etc... ¿cómo guardar una cadena de salida en una variable e imprimirla en una posición diferente?

ejemplo de salida de nettop:

 iMac191 ~  nettop -l1 -n -J interface,state -p "$(/usr/bin/pgrep example.app)"                                 
                                                                                                      interface         state
example.77513
   tcp4 10.xxx.xxx.xxx:53410<->23.xxx.xxx.xxx:32146                                                         utun6       SynSent
   tcp4 10.xxx.xxx.xxx:36496<->185.xxx.xxx.xxx:50734                                                        utun6       SynSent

La columna 1 de la primera fila es "interface" y la columna 1 de la segunda fila es "example.77513", por lo que el comando column -t no funciona. Necesito mover la columna 1 de la segunda fila a la columna 1 de la primera fila, o viceversa, antes de usar column -t para eliminar los espacios en blanco y mantener la fila de encabezado

Me gustaría que la salida se vea algo así:

example.77513                                         interface      state
tcp4 10.xxx.xxx.xxx:53410<->23.xxx.xxx.xxx:32146      utun6          SynSent
tcp4 10.xxx.xxx.xxx:36496<->185.xxx.xxx.xxx:50734     utun6          SynSent

Introduje algunas preguntas en la búsqueda y solo pude encontrar un ejemplo que no pude adaptar para esta situación.

2voto

El encabezado solo tiene tres columnas, la tabla en sí tiene cuatro, por lo que se requiere un encabezado ficticio para que la tabla se formatee correctamente.

nettop -l1 -n -J interface,state -p "$(/usr/bin/pgrep example.app)" \
    | awk 'NR == 2 { gsub(/ /, "_");
                     print substr($0, 1, index($0, ".")+6),".","interface","state";
                     next
                   }
           NR > 2  { print $0 }' \
    | column -t

Esto simplemente ignora la primera línea (siempre es la misma de todos modos) y crea el encabezado a partir de la línea dos, incluyendo . como un encabezado ficticio.

Si desea que la salida sea como se describe en la pregunta, puede usar

nettop -l1 -n -J interface,state -p "$(/usr/bin/pgrep example.app)" \
    | awk 'NR == 2 { gsub(/ /, "_");
                     printf "%s\tinterface\tstate\n",substr($0, 1, index($0, ".")+6);
                     next
                   }
           NR > 2  { printf "%s %s\t%s\t%s\n", $1, $2, $3, $4 }' \
    | column -s $'\t' -t

$'\t' se expande a un caracter de tabulación entre comillas simples.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X