2012-01-13 3 views
3

내 C 프로그램에서 특정 응용 프로그램 목록에 대한 응용 프로그램 및 출력 포트 목록을 가져 오려고합니다.aws를 사용하여 ss 출력을 구문 분석

나는 나에게 41477 59505 같은 목록을 제공

ss -natp | awk '/firefox/ { split($4,array,":"); printf "%d ", array[2]} END{print ""}'' 

같은 것을 사용하여 생각 해요.

ss를 한 번 호출 한 다음 모든 응용 프로그램에 대해 이렇게 효율적인 방법은 무엇입니까? (다중 출력 파이프? 많은 일치를 위해 awk를 사용하는 최적의 방법이 있습니까? 파일을 캐핑 한 다음 여러 번 여러 번 awk하는 것입니까?)

고마워요!

답변

3

awk의 연관 배열 기능을 사용하십시오.

ss -natp | awk '{port = split($4, array, ":"); program[$1] = program[$1] " " port; } 
       END { for (p in program) print p ": " program[p]; }' 

약하지만 개념은 대략 정확합니다.

+0

어떤 열에 프로그램 이름이 포함되어 있는지 확인하지 못했습니다. 내 컴퓨터에서 'ss'를 찾을 수 없습니다. 나는 그것이 $ 1이라고 가정했지만 스크립트가 어디에 나타나는지 적응할 수 있도록 조정할 수 있습니다. 귀하의 스크립트는 Firefox의 어느 곳에서나 일치합니다. –

관련 문제