편집기 -- awk

4564 단어 shell
목차
  • 1. 작업 원리
  • 2. 명령 형식
  • 3. awk 에서 흔히 볼 수 있 는 내장 변수
  • 4. awk 편집기 사용
  • 줄 별로 텍스트 출력
  • 필드 별로 텍스트 출력
  • 파이프, 더 블 인덱스 를 통 해 셸 명령 호출

  • 작업 원리
  • 텍스트 를 한 줄 씩 읽 습 니 다. 기본적으로 빈 칸 이나 tab 키 를 구분자 로 구분 하고 구 분 된 필드 를 내장 변수 에 저장 하 며 패턴 이나 조건 에 따라 편집 명령 을 수행 합 니 다.
  • sed 명령 은 한 줄 의 처리 에 자주 사용 되 며, awk 는 한 줄 을 여러 개의 '필드' 로 나 누 어 처리 하 는 경향 이 있 습 니 다.
  • awk 도 텍스트 를 한 줄 씩 읽 습 니 다. 기본적으로 빈 칸 이나 tab 키 를 구분자 로 구분 하여 구 분 된 필드 를 내장 변수 에 저장 하고 패턴 이나 조건 에 따라 편집 명령 을 수행 합 니 다.실행 결 과 는 print 기능 을 통 해 필드 데 이 터 를 인쇄 하여 표시 할 수 있 습 니 다.
  • awk 명령 을 사용 하 는 과정 에서 논리 연산 자 '& &' 를 사용 하여 '와', '| |' 은 '또는', '!' 는 '비' 를 표시 할 수 있 습 니 다.+, -, *,/,%, ^ 와 같은 간단 한 수학 연산 도 할 수 있다.
    명령 형식
    awk    '      {  }'    1    2 …
    awk -f         1    2 …
    

    3. awk 에서 흔히 볼 수 있 는 내장 변수
    awk       (    )    :
    FS:    。            ,         。 "-F"    
    NF:           。
    NR:         (  )。
    $0:           。
    $n:       n   ( n )。
    FILENAME:       。
    RS:    。awk         ,   RS              , awk         ,     。    '
    '

    4. awk 편집기 사용
    줄 별로 텍스트 출력
    awk '{print}' awk.txt				    #      
    awk '{print $0}' awk.txt 				#      
    
    awk 'NR==1,NR==3{print}' awk.txt		#    1~3    
    awk '(NR>=1)&&(NR<=3){print}' awk.txt	#    1~3    
    
    awk 'NR==1||NR==3{print}' awk.txt		#   1 、 3   
    
    awk '(NR%2)==1{print}' awk.txt 		#          
    awk '(NR%2)==0{print}' awk.txt		#          
    
    awk '/^root/{print}' /etc/passwd		#    root     
    
    awk '/nologin$/{print}' /etc/passwd		#    nologin     
    
    #   /bin/bash      ,    grep -c "/bin/bash$" /etc/passwd
    awk 'BEGIN {x=0};/\/bin\/bash$/{x++};END {print x}' /etc/passwd		
    BEGIN    ,          ,     BEGIN        ;awk        ,     END        ,END{}    ,            
    

    필드 로 텍스트 출력
    awk -F ":" '{print $3}' /etc/passwd 		#      “:”    3   
    
    
    awk -F ":" '{print $1,$3}' /etc/passwd		#       1、3   
    
    awk -F ":" '$3<5{print $1,$3}' /etc/passwd	#   3       5  1、3     
    
    #   3        200  
    awk -F ":" '!($3<200){print}' /etc/passwd
    #   3        200  ,    BEGIN   ,          
    awk 'BEGIN {FS=":"};{if($3>=200){print}}' /etc/passwd
    
    #($3>$4)?$3:$4     ,   3        4     ,   3       max,   4       max
    awk -F ":" '{max=($3>$4)?$3:$4;{print max}}' /etc/passwd		
    
    #         ,        ,NR  1
    awk -F ":" '{print NR,$0}' /etc/passwd
    
    #         7      /bash    1   
    awk -F ":" '$7~"/bash"{print $1}' /etc/passwd
    
    #   1      root  7       1、2   
    awk -F ":" '($1~"root")&&(NF==7){print $1,$2}' /etc/passwd
    
    #   7      /bin/bash,   /sbin/nologin    
    awk -F ":" '($7!="/bin/bash")&&($7!="/sbin/nologin"){print}' /etc/passwd
    

    파이프, 더 블 따옴표 로 Shell 명령 을 호출 합 니 다.
    #             ,END{}    ,            
    echo $PATH | awk 'BEGIN{RS=":"};END{print NR}'
    
    #   wc -l        bash      
    awk -F: '/bash$/{print | "wc -l"}' /etc/passwd
    grep -c "bash$" /etc/passwd  #    
    
    #           
    free -m | awk '/Mem:/ {print int($3/($3+$4)*100)}'
    
    #    CPU   ,(-b -n 1      1      )
    top -b -n 1 | grep Cpu | awk -F ',' '{print $4}' | awk '{print $1}'
    
    #          ,   uptime;second ago          ,+"%F %H:%M:%S"   +"%Y-%m-%d %H:%M:%S"     
    date -d "$(awk -F "." '{print $1}' /proc/uptime) second ago" +"%F %H:%M:%S"
    
    #  w  ,          
    awk 'BEGIN {while ("w" | getline) n++ ; {print n-2}"%"}'
    
    #   hostname,         
    awk 'BEGIN {"hostname" | getline ; {print $0}}'
    

    getline 좌우 에 리 셋 문자 가 없 을 때 "getline 좌우 에 리 셋 문자 가 있 을 때"
  • 좋은 웹페이지 즐겨찾기