Advertisement
Guest User

Untitled

a guest
Sep 13th, 2017
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Awk 2.02 KB | None | 0 0
  1. #!/usr/bin/awk -f
  2.  
  3. function add_info(INFO, pid,      COL, file, line, A, sclose, HDR, add) {
  4.     COL[1] = pid
  5.     COL[2] = "-" # name
  6.     COL["n"] = 2
  7.     if (!("hasheader" in INFO)) {
  8.         HDR[1] = "PID"
  9.         HDR[2] = "Name"
  10.         HDR["n"] = 2
  11.     }
  12.     file = "/proc/" pid "/status"
  13.     while ((getline line <file) > 0) {
  14.         sclose = 1
  15.         split(line, A)
  16.         if (A[1] == "Name:") COL[2] = A[2]
  17.         if (!match(A[1], "^Vm[^:]*")) continue
  18.         if (!("hasheader" in INFO))
  19.             HDR[++HDR["n"]] = substr(A[1], 3, RLENGTH-2)
  20.         COL[++COL["n"]] = A[2]
  21.         # ignore unexistant and kernel process:
  22.         add = 1
  23.     }
  24.     if (sclose) close(file)
  25.     if (!("hasheader" in INFO)) {
  26.         add_row(INFO, HDR)
  27.         INFO["hasheader"] = 1
  28.     }
  29.     if (add) add_row(INFO, COL)
  30. }
  31.  
  32. function add_row(INFO, COL,     r, i) {
  33.     r = ++INFO["rows"]
  34.     for (i = 1; i <= COL["n"]; i++) INFO[r, i] = COL[i]
  35.     if (INFO["cols"] < COL["n"])
  36.         INFO["cols"] = COL["n"]
  37. }
  38.  
  39. function print_info(INFO,     c, r, W, w) {
  40.     for (c = 1; c <= INFO["cols"]; c++) {
  41.         W[c] = 0
  42.         for (r = 1; r <= INFO["rows"]; r++) {
  43.             w = length(INFO[r, c])
  44.             if (w > W[c]) W[c] = w
  45.         }
  46.     }
  47.     for (r = 1; r <= INFO["rows"]; r++) {
  48.         for (c = 1; c <= INFO["cols"]; c++)
  49.             printf("%-" W[c] "s ", INFO[r, c])
  50.         print ""
  51.     }
  52. }
  53.  
  54. function heapsort(ARR,     end, start) {
  55.     end = ARR["n"]
  56.     start = int(end / 2)
  57.     while (start > 0)
  58.         siftdown(ARR, start--, end)
  59.     while (end > 1) {
  60.         swap(ARR, end, 1)
  61.         siftdown(ARR, 1, --end)
  62.     }
  63. }
  64.  
  65. function swap(ARR, i, j,     t) {
  66.     t = ARR[i]
  67.     ARR[i] = ARR[j]
  68.     ARR[j] = t
  69. }
  70.  
  71. function siftdown(ARR, root, end,     child) {
  72.     while (root * 2 <= end) {
  73.         child = root * 2
  74.         if (child + 1 <= end && ARR[child] < ARR[child+1])
  75.             child++
  76.         if (ARR[root] < ARR[child]) {
  77.             swap(ARR, root, child)
  78.             root = child
  79.         } else
  80.             return
  81.     }
  82. }
  83.  
  84. BEGIN {
  85.     PROCS["n"] = 0
  86.     cmd = "ls /proc"
  87.     while ((cmd | getline) > 0) {
  88.         if (!/^[0-9]+$/) continue
  89.         PROCS[++PROCS["n"]] = 0 + $0
  90.     }
  91.     close(cmd)
  92.     heapsort(PROCS)
  93.     for (n = 1; n <= PROCS["n"]; n++)
  94.         add_info(INFO, PROCS[n])
  95.     print_info(INFO)
  96. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement