쉘 스크립트로 파일을 한 줄씩 읽고 20% 미만의 줄을 삭제하는 방법

쉘 스크립트로 파일을 한 줄씩 읽고 20% 미만의 줄을 삭제하는 방법

도움이 필요해요. 이 파일이 있는데 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

관련 정보