도움이 필요해요. 이 파일이 있는데 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
는 좋은 선택이 아닙니다. 이유에 대한 설명은 예제를 참조하세요.
내 개인적인 선택은 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