我需要帮助。我有这个文件,我想使用 for 循环逐行读取它,并删除列表 %CPU 中少于 20% 的行。
%CPU PID USER UID COMMAND %MEM
71 9136 ashti 1000 firefox 4.6
36 1432 ashti 1000 gnome-shell 8.6
25 9100 ashti 1000 gedit 1.1
3 9092 ashti 1000 nautilus 1.2
2 9109 ashti 1000 gnome-terminal- 0.9
1 1248 ashti 1000 Xorg 2.6
0 1375 ashti 1000 VBoxClient 0.0
0 9118 ashti 1000 bash 0.1
0 269 root 0 systemd-journal 2.8
我想要像这个例子
%CPU PID USER UID COMMAND %MEM
71 9136 ashti 1000 firefox 4.6
36 1432 ashti 1000 gnome-shell 8.6
25 9100 ashti 1000 gedit 1.1
并保存在新文件中。
此致
答案1
和grep
:
grep -e "^%" -e "^[2-9][1-9]" file | column -t
column -t
让它变得漂亮:
%CPU PID USER UID COMMAND %MEM
71 9136 ashti 1000 firefox 4.6
36 1432 ashti 1000 gnome-shell 8.6
25 9100 ashti 1000 gedit 1.1
答案2
带保留头,awk
表达式:
$ awk 'NR==1 || (NR > 1 && $1 > 20)' file
%CPU PID USER UID COMMAND %MEM
71 9136 ashti 1000 firefox 4.6
36 1432 ashti 1000 gnome-shell 8.6
25 9100 ashti 1000 gedit 1.1
答案3
对于此任务,循环for
不是一个好的选择 - 有关原因的讨论,请参见示例
我个人的选择是米勒:
$ mlr --pprint filter -x '${%CPU} < 20' file > newfile
$ cat newfile
%CPU PID USER UID COMMAND %MEM
71 9136 ashti 1000 firefox 4.6
36 1432 ashti 1000 gnome-shell 8.6
25 9100 ashti 1000 gedit 1.1