一千萬個為什麽

搜索

使用awk從'ps aux'輸出獲取內存使用情況

我必須使用awk解決練習。基本上我需要從'ps aux'命令檢索每個用戶的內存使用總量和格式,如下所示:

User    Total%Mem
user1      3.4%
user2      1.5%

等等。

我似乎無法解決的問題是:我如何知道有多少用戶登錄?我怎樣才能為每一個做出不同的總和呢?

謝謝 :)

最佳答案

你不需要知道任何這些。您需要知道的是:

  1. You have columnar output with the same number of columns in each row.
  2. The first column is the user login name.
  3. The 4th column is the %MEM column.
  4. Awk initializes variable at 0 automatically.
  5. Awk index keys are arbitrary values :)

    ps aux | awk 'NR != 1 {x[$1] += $4} END{ for(z in x) {print z, x[z]"%"}}'
    

我將輸入傳遞給awk,然後我告訴它跳過第1行(NR!= 1)。然後對於每一行,它用英語讀取如下:

數組'x'中的

,遞增值   'x [username]'由第4個值   柱。如果數組鍵不存在   然而,創建它,初始化為0,和   然後按值增加那個   第四欄。

當Awk為每一行完成此操作時,它會運行“END”塊中的代碼,該塊表示打印出每個用戶名(x中的z),以及與之關聯的 final 聚合值user(x [z]),後跟“%”。

如果要逐行查看它,可以使用相同的基本規則,但在處理每一行後而不是在“END”中添加打印:

ps aux | awk 'NR != 1 {x[$1] += $4; print $1, x[$1]}'

轉載註明原文: 使用awk從'ps aux'輸出獲取內存使用情況