助けが必要です。このファイルがあり、forループを使用して1行ずつ読み込み、リスト%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
は良い選択ではありません。理由の説明については、例を参照してください。
私の個人的な選択はMillerです。
$ 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