所以我正在嘗試開發一個腳本,它將找到特定的進程,並殺死一直運行時間最長的腳本。試圖按照經過的時間對命令進行排序已成爲問題。這裏是我正在運行的命令,我知道有很多|並可能更乾淨爲什麼要這樣做,但我對使用awk相當陌生。按etime排序PS命令
ps -eo pid,cmd,stat,etime --sort=etime | grep cassi32 | awk '$3 == "/rESTECH"' | awk '$4 == "S"'
和我得到的輸出是這樣的。
5703 cassi32 /rESTECH S 00:40
65504 cassi32 /rESTECH S 1-21:45:39
65520 cassi32 /rESTECH S 03:21:39
65521 cassi32 /rESTECH S 3-15:02:37
65531 cassi32 /rESTECH S 1-21:44:39
正如您所看到的,etime列沒有顯示爲任何特定順序,而是按PID進行排序。
關於如何通過etime排序的任何想法。一旦完成,我可以照顧殺人的一部分。
你希望它出現在什麼順序? 'ps'後沒有任何東西會改變'ps'輸出的順序,所以這是你需要命令的命令。另外,你不需要在管道中使用grep + 2 awk命令,原始的'ps ...'輸出以及你想要從腳本中獲得的相應的最終輸出。 –
由於sort -k5n同意,所以顯然在數字上對「數字」的定義進行了排序。儘管沒有前導空格(如果單獨使用該列)'sort -n'會給你一個不同的順序。在該字段上的非數字「排序」可以將00:40,03:21:39,1-21:44:39,1-21:45:39,3-15:02:37作爲輸出排序。 –