Domanda
Voglio ottenere un elenco di applicazioni e le loro porte di output per un determinato elenco di applicazioni, dal mio programma C.
Sto pensando di usare qualcosa di simile
ss -natp | awk '/firefox/ { split($4,array,":"); printf "%d ", array[2]} END{print ""}''
che mi dà un elenco come 41477 59505
.
Qual è un modo efficiente di chiamare SS una volta e poi ottenere questo per tutte le applicazioni? (Pipi di output multipli? Esiste un modo ottimale di usare AWK per molte corrispondenze? Catting Ss a un file e poi awk che lo fa molte volte?)
Grazie!
Soluzione
Utilizzare le capacità di array associative di awk
.
ss -natp | awk '{port = split($4, array, ":"); program[$1] = program[$1] " " port; }
END { for (p in program) print p ": " program[p]; }'
Non testato - ma il concetto è approssimativamente corretto.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow