cut 명령을 사용하여 예상한 출력을 얻지 못합니까?

cut 명령을 사용하여 예상한 출력을 얻지 못합니까?
[root@localhost ~]#  ps aux | grep ata
root        19  0.0  0.0      0     0 ?        S    07:52   0:00 [ata/0]
root        20  0.0  0.0      0     0 ?        S    07:52   0:00 [ata_aux]
root      1655  0.0  2.6  22144 13556 tty1     Ss+  07:53   0:18 /usr/bin/Xorg :0 -nr -verbose -auth /var/run/gdm/auth-for-gdm-t1gMCU/database -nolisten tcp vt1
root      3180  0.0  0.1   4312   728 pts/0    S+   14:09   0:00 grep ata
[root@localhost ~]#  ps aux | grep ata | cut -d" " -f 2

[root@localhost ~]#

출력에서 두 번째 열을 예상했지만 아무것도 얻지 못했습니다. 어떤 아이디어가 있나요?

답변1

의 경우 -d " "필드 구분 기호는 단 하나의 공백 문자입니다. 쉘 토큰화와 달리 cut공백은 다른 문자와 다르게 처리되지 않습니다. 따라서 로 돌아가는 것과 마찬가지로 으로 cut -d " " -f2돌아갑니다 .""root   19""cut -d: -f2root:::19

공간 시퀀스를 다음으로 변환하려면 공백을 줄여야 합니다.하나공간:

ps aux | grep ata | tr -s ' ' | cut -d ' ' -f2

또는 awk구분 기호를 사용하지 않고 공백이 아닌 문자 시퀀스 목록으로 분할하는 기본 스핏 모드에서 where를 사용하세요.

ps aux | awk '/ata/{print $2}'

하지만 이 경우 다음을 사용할 수 있습니다.

pgrep -f ata

아니면 적어도:

ps -eo pid= -o args= | awk '/ata/{print $1}'

매개변수만 일치합니다.

답변2

사용:

ps aux | awk '/ata/{print $2}'

cut열 사이에 공백이 여러 개 있기 때문에 사용 중인 명령이 원하는 출력을 제공하지 않습니다.

관련 정보