awk로 컬럼 값 합계 구하기
특정 프로세스의 CPU 및 MEM usage 정보를 취합 출력하는 쉘 스크립트를 작성했는데, 여기에 top과 awk를 사용했다. 이번에는 특히 awk를 유용하게 사용했다.
다음은 awk에 사용하기 위한 예제로 top 명령의 출력문이다. 물론 리눅스 머신의 모든 프로세스를 보여주기에는 너무 많은 양이므로 (그리고 일부 보안을 위해) 내용을 가공했다. 아래 내용이 top_result
라는 파일에 저장되어 있다고 가정한다.
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 34028 3812 2540 S 0.0 0.1 15:37.54 init
1722 root 20 0 24872 4912 3224 S 0.0 0.1 0:00.35 bash
19728 root 20 0 24796 6396 3404 S 0.0 0.2 0:00.19 bash
19820 root 20 0 24804 6324 3320 S 0.0 0.2 0:00.37 bash
먼저 init 프로세스의 MEM usage만 찍어보자. COMMAND column의 값이 init인 라인의 %MEM column 값을 찍으면 된다. 각각 $12 와 $10 컬럼이다.
$ awk '$12 == "init" {print $12": "$10}' ./top_result
init: 0.1
다음엔 bash 프로세스의 MEM usage의 합을 구해보자. 위 예제를 사용하면 값이 세개 찍힐 뿐, 그 합을 구할 수 없다.
bash: 0.1
bash: 0.2
bash: 0.2
제대로 된 합을 구하기 위해서는 {...}
액션과 END를 배합해야 한다. 아래와 같이 각 라인에서는 %MEM column의 값을 sum에 더한다. END 다음의 액션에서는 취합이 끝난 결과값을 출력한다.
$ awk '$12 == "bash" {sum += $10} END {print $12": "sum}' ./top_result
bash: 0.5
— END OF POST.