2013-01-21 5 views
2

리눅스에서 명령어 ps aux으로 얻을 수있는 파일이 있습니다.awk 명령을 사용하여 필드를 자르는 방법은 무엇입니까?

USER  PID %CPU %MEM VSZ RSS TTY  STAT START TIME COMMAND 
root   1 0.0 0.0 2280 732 ?  Ss 08:20 0:00 init [2] 
root  327 0.0 0.1 2916 1456 ?  Ss 08:20 0:00 udevd --daemon 
root  1681 0.0 0.0 2376 800 ?  Ss 08:20 0:00 /sbin/rpcbind -w 
root  2071 0.0 0.1 27920 1708 ?  Sl 08:20 0:00 /usr/sbin/rsyslogd -c5 

내가 같은, 마지막 필드의 콘텐츠를 원하는 : 내가, $의 AWK를 사용하면

COMMAND 
init [2] 
udevd --daemon 
/sbin/rpcbind -w 
/usr/sbin/rsyslogd -c5 

이 '{$ (11) 인쇄}'테스트, 내가 얻을 :

COMMAND 
init 
udevd 
/sbin/rpcbind 
/usr/sbin/rsyslogd 
내가, $의 AWK를 사용하면

'{$ (12) 인쇄}'테스트는, 내가 얻을 :

[2] 
--daemon 
-w 
-c5 

내가 어떻게 할 수 있니?

답변

5
awk '{for(i=1;i<11;i++)$i="";print }' 

은 또는 당신은 다만 할 수 있습니다 당신은 AWK를 사용할 필요하지 않는 경우

awk '{print $11,$12}' 
+0

첫 번째 솔루션처럼 잘라 내기 명령을 변경 그 안에있을거야. – mgoffin

1

, 다음도 작동합니다

ps aux | tr -s ' ' ' ' | cut -d' ' -f11- 

조금 것을 해독. ps 공백과의 열을 분리하기 때문에 (제 문자열에 지정된) 단일 공간 (제 문자열 [ ''의 제 1 세트]로 지정된)
tr -s ' ' ' ' 

공백의 문자열을 반복하여 대체한다. 필드는 이제 하나의 공간이 분리되어 있기 때문에 이제, 우리가 사용할 수 있습니다

필드가합니다 ('-d'후 문자) 공백으로 구분, 그리고 끝으로 필드를 (11)을 선택 말한다
cut -d' ' -f11- 

라인 ('-f11-'로 표시).

처음에는 조금 더 복잡해 보일 수도 있지만, 분리 된 문자열을 구문 분석하면 분리 된 문자열을 구문 분석하는 작업이 정말 간단 해집니다.

1

당신은 마지막 필드의 말씀을 통해 루프 및 인쇄 할 수 있습니다 :

ps aux | awk '{ for(i=11 ; i <=NF ; i++) { printf("%s ", $i) } ; print "" }' 

당신이 나중에 명령을 처리하려는 경우, 당신은 변수에 넣을 수 있습니다 :

ps aux | awk '{ CMD = "" ; for(i=11 ; i <=NF ; i++) { CMD = CMD " " $i } ; sub(/^ /, "", CMD) ; print CMD }' 
1

들어 위의 출력이 작동합니다 :

ps aux | cut -c66- 

참고 : 마지막 '-'조심하십시오. 당신이 그것을 놓치면, 당신은 단지 66 번째 숯을 얻을 것입니다 !!!

그러나 항상이 작업을 수행하려면 COMMAND 열은 66 번째 char 위치에서 시작해야합니다. 이 다른 경우가 나타날 것입니다 명령의 유형을 모르는 얼마나 많은 공간 결코로 가장하는 COMMAND 열의 번호를 기록하고이 게시물에서이

cut -c<column#>- 
관련 문제