Linux 에서 awk 사용법

3073 단어 shellawk
Linux 에서 awk 의 용법
1. awk 개술 AWK 는 좋 은 텍스트 처리 도구 입 니 다. 파일 의 모든 줄 을 스 캔 하여 명령 줄 에 주어진 내용 과 일치 하 는 패턴 을 찾 습 니 다.일치 하 는 내용 을 발견 하면 다음 프로 그래 밍 절 차 를 진행 합 니 다.일치 하 는 내용 을 찾 지 못 하면 다음 줄 을 계속 처리 합 니 다.2. 형식 awk [옵션 매개 변수] 'script' var = file (s) 또는 awk [옵션 매개 변수] - f scriptfile var = file (s)
3. 매개 변수 - F --- 입력 파일 의 구분 자 를 지정 합 니 다.기본 구분자 가 공백 입 니 다.
4. 내장 변수
  • $0 전체 줄
  • $n 번 째 n 열
  • NF 현재 줄 에 몇 열 이 있 고 한 줄 씩 처리 (열 수)
  • NR 현재 줄 의 줄 번호 (줄 수)
  • FNR 은 현재 처리 줄 이 원문 에 있 는 번호 (줄 번호)
  • 를 기록 합 니 다.
  • FS 는 구분 자 를 저장 하거나 설정 합 니 다. FS = ":"도 - F
  • 라 고 쓸 수 있 습 니 다.
    5. 연산 판단 awk 는 여러 가지 연산 을 지원 합 니 다. 이러한 연산 은 C 언어 가 제공 하 는 기본 과 같 습 니 다. 예 를 들 어 +, -, *,/,% 등 이 있 습 니 다. 또한 awk 는 C 언어 에서 +, –, + =, - = +, = - 와 같은 기능 도 지원 합 니 다.awk 역시 관계 판단 을 지원 합 니 다.(같 지 않 음), > (크 지 않 음), > = (크 지 않 음 과 같 음), < = (작 음 과 같 음) 등등
    [root@localhost Desktop]# awk -F: '$1~/root/{print $1}' /etc/passwd
    root
    

    첫 번 째 열 에 만 일치
    [root@localhost Desktop]# awk -F: '$3>1000 {print $1}' /etc/passwd
    nfsnobody
    

    /etc/passwd 파일 에서 uid 가 1000 이상 인 사용자 이름 을 출력 합 니 다.
    6. 프로 세 스 제어 awk 는 프로 세 스 제어 문 구 를 제공 합 니 다. if, while, for 는 c 언어 와 유사 합 니 다.
    7. 이 컴퓨터 의 ip 주 소 를 인 스 턴 스 로 표시 합 니 다.
    [root@localhost Desktop]# ifconfig eno16777736 |grep inet |awk '{print $2}'
    192.168.230.140
    fe80::20c:29ff:fed8:7834
    

    이 컴퓨터 의 구체 적 인 ip 정 보 를 ifconfig 명령 으로 표시 한 다음 grep 를 사용 하여 ip 주소 에 있 는 정 보 를 걸 러 내 고 마지막 으로 awk 로 지정 한 필드 를 캡 처 합 니 다.
    최근 시스템 로그 인 상태 보이 기
    [root@localhost Desktop]# last  |awk '{print $1}'
    root
    root
    (unknown
    reboot
    
    wtmp
    

    Redhat 사용자 의 bash 보기
    [root@localhost Desktop]# cat /etc/passwd |grep redhat |awk -F":" '{print $7}'
    /bin/bash
    

    이것 은 기본 구분자 가 없습니다. 다음 으로 지정 합 니 다.
    NF 매 행렬 수 계산 [root@localhost Desktop]# cat/etc/fstab
    #
    cat /etc/fstab
    #Created by anaconda on Mon Sep 16 22:28:05 2019
    #
    #Accessible filesystems, by reference, are maintained under '/dev/disk'
    #See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
    #
    /dev/mapper/rhel-root   /                       xfs     defaults        0 0
    UUID=c66514ee-7005-4db4-94a6-fd2c9c27eb49 /boot                   xfs     defaults        0 0
    /dev/mapper/rhel-swap   swap                    swap    defaults        0 0
    [root@localhost Desktop]# awk '{print NF}' /etc/fstab 
    0
    1
    2
    10
    1
    9
    12
    1
    6
    6
    6
    

    /etc/fstab 줄 보기
    [root@localhost Desktop]# awk '{print NR}' /etc/fstab
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    

    줄 출력 전에 필드 추가
    [root@localhost Desktop]# awk -F":" '{print "hello",$1}' /etc/passwd
    hello root
    hello bin
    hello daemon
    hello adm
    hello lp
    hello sync
    hello shutdown
    hello halt
    hello mail
    hello operator
    hello games
    hello ftp
    hello nobody
    hello avahi-autoipd
    hello dbus
    hello polkitd
    hello abrt
    hello tss
    hello unbound
    hello colord
    hello usbmuxd
    hello libstoragemgmt
    

    좋은 웹페이지 즐겨찾기