awk 간명 한 튜 토리 얼

19879 단어 linuxshellawk
nice
일부 네티즌 들 은 이틀 전 '리 눅 스에 서 알 아야 할 기교' 를 보고 awk 와 sed 를 가르쳐 달라 고 부탁 해 이 글 을 올 렸 다.나 는 이 80 대 젊 은 친구 들 이 awk/sed 와 같은 상고 신기 에 대해 좀 낯 설 어 졌 을 것 이 라 고 생각한다. 그래서 나 같은 늙 은 녀석 이 볶음밥 을 해 야 한다.게다가 AWK 는 베 어 랩 이 1977 년 만들어 낸 텍스트 출현 신기 로, 올 해 는 뱀의 해 이 며 AWK 의 본명 년 이 며 나이 도 나 와 비슷 해 그 를 위해 글 을 쓸 필요 가 있다.
AWK 라 고 부 르 는 이 유 는 세 명의 창업 자 를 뽑 았 기 때 문 입 니 다. Alfred Aho, Peter Weinberger, 그리고 Brian Kernighan 의 Family Name 의 첫 글자 입 니 다.AWK 를 배 우려 면 AWK 의 상당히 고전적 인 책 인 《 The AWK Programming Language 》 를 언급 해 야 한다. 그것 의 콩짜개 평 점 은 9.4 점 이다!아마 존 에 서 는 1022.30 원 에 팔 린 다.
제 가 여기 서 가 르 치 는 과정 은 모든 것 을 다 갖 추고 싶 지 않 습 니 다. 본 고 는 제 가 예전 에 고 언어 소개 와 마찬가지 로 모두 예시 이 고 대체적으로 쓸데없는 말 이 없습니다.
나 는 단지 두 가지 목적 을 달성 하고 싶다.
1) 버스 를 타고 출퇴근 하거나 변 기 를 타고 똥 을 쌀 때 다 읽 을 수 있다.
2) 나 는 단지 이 박문 을 화끈 한 탈 의 무녀 처럼 너의 흥 미 를 불 러 일 으 키 고 싶 을 뿐이다. 그리고 너 자신 이 가서 시간 을 내 서 훑 어야 한다.
잔말 말고 벗 어 봅 시다.
무대 에 오 르 기 시작 하 다.
나 는 netstat 명령 에서 다음 과 같은 정 보 를 예 로 들 었 다.
$ catnetstat.txt
Proto Recv-Q Send-Q Local-Address          Foreign-Address             State
tcp        0      0 0.0.0.0:3306           0.0.0.0:*                   LISTEN
tcp        0      0 0.0.0.0:80             0.0.0.0:*                   LISTEN
tcp        0      0 127.0.0.1:9000         0.0.0.0:*                   LISTEN
tcp        0      0 coolshell.cn:80        124.205.5.146:18245         TIME_WAIT
tcp        0      0 coolshell.cn:80        61.140.101.185:37538        FIN_WAIT2
tcp        0      0 coolshell.cn:80        110.194.134.189:1032        ESTABLISHED
tcp        0      0 coolshell.cn:80        123.169.124.111:49809       ESTABLISHED
tcp        0      0 coolshell.cn:80        116.234.127.77:11502        FIN_WAIT2
tcp        0      0 coolshell.cn:80        123.169.124.111:49829       ESTABLISHED
tcp        0      0 coolshell.cn:80        183.60.215.36:36970         TIME_WAIT
tcp        0   4166 coolshell.cn:80        61.148.242.38:30901         ESTABLISHED
tcp        0      1 coolshell.cn:80        124.152.181.209:26825       FIN_WAIT1
tcp        0      0 coolshell.cn:80        110.194.134.189:4796        ESTABLISHED
tcp        0      0 coolshell.cn:80        183.60.212.163:51082        TIME_WAIT
tcp        0      1 coolshell.cn:80        208.115.113.92:50601        LAST_ACK
tcp        0      0 coolshell.cn:80        123.169.124.111:49840       ESTABLISHED
tcp        0      0 coolshell.cn:80        117.136.20.85:50025         FIN_WAIT2
tcp        0      0 :::22                  :::*                        LISTEN

다음은 가장 간단 하고 자주 사용 하 는 awk 예제 입 니 다. 출력 1 열 과 4 번 째 예 입 니 다.
  • 그 중에서 작은 따옴표 에 큰 괄호 로 묶 인 것 은 awk 의 문구 입 니 다. 주의해 야 할 것 은 작은 따옴표 에 만 포 함 됩 니 다.
  • 그 중의 $1. $n 은 몇 번 째 예 를 나타 낸다.주: $0 은 전체 줄 을 표시 합 니 다.
  • $ awk '{print $1, $4}'netstat.txt
    Proto Local-Address
    tcp 0.0.0.0:3306
    tcp 0.0.0.0:80
    tcp 127.0.0.1:9000
    tcp coolshell.cn:80
    tcp coolshell.cn:80
    tcp coolshell.cn:80
    tcp coolshell.cn:80
    tcp coolshell.cn:80
    tcp coolshell.cn:80
    tcp coolshell.cn:80
    tcp coolshell.cn:80
    tcp coolshell.cn:80
    tcp coolshell.cn:80
    tcp coolshell.cn:80
    tcp coolshell.cn:80
    tcp coolshell.cn:80
    tcp coolshell.cn:80
    tcp :::22

    awk 의 포맷 출력 을 살 펴 보 겠 습 니 다. C 언어의 printf 와 다 를 바 없습니다.
    $ awk '{printf "%-8s %-8s %-8s %-18s %-22s %-15s
    ",$1,$2,$3,$4,$5,$6}'netstat.txt Proto Recv-Q Send-Q Local-Address Foreign-Address State tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN tcp 0 0 coolshell.cn:80 124.205.5.146:18245 TIME_WAIT tcp 0 0 coolshell.cn:80 61.140.101.185:37538 FIN_WAIT2 tcp 0 0 coolshell.cn:80 110.194.134.189:1032 ESTABLISHED tcp 0 0 coolshell.cn:80 123.169.124.111:49809 ESTABLISHED tcp 0 0 coolshell.cn:80 116.234.127.77:11502 FIN_WAIT2 tcp 0 0 coolshell.cn:80 123.169.124.111:49829 ESTABLISHED tcp 0 0 coolshell.cn:80 183.60.215.36:36970 TIME_WAIT tcp 0 4166 coolshell.cn:80 61.148.242.38:30901 ESTABLISHED tcp 0 1 coolshell.cn:80 124.152.181.209:26825 FIN_WAIT1 tcp 0 0 coolshell.cn:80 110.194.134.189:4796 ESTABLISHED tcp 0 0 coolshell.cn:80 183.60.212.163:51082 TIME_WAIT tcp 0 1 coolshell.cn:80 208.115.113.92:50601 LAST_ACK tcp 0 0 coolshell.cn:80 123.169.124.111:49840 ESTABLISHED tcp 0 0 coolshell.cn:80 117.136.20.85:50025 FIN_WAIT2 tcp 0 0 :::22 :::* LISTEN

    외 투 를 벗다
    필터 레코드
    기록 을 어떻게 걸 러 내 는 지 다시 한 번 보 겠 습 니 다. (아래 여과 조건 은: 세 번 째 열의 값 은 0 & & 여섯 번 째 열의 값 은 LISTEN 입 니 다)
    $ awk '$3==0 && $6=="LISTEN" 'netstat.txt
    tcp        0      0 0.0.0.0:3306               0.0.0.0:*              LISTEN
    tcp        0      0 0.0.0.0:80                 0.0.0.0:*              LISTEN
    tcp        0      0 127.0.0.1:9000             0.0.0.0:*              LISTEN
    tcp        0      0 :::22                      :::*                   LISTEN

    그 중의 '=' 은 비교 연산 자 이다.기타 비교 연산 자:! =, >, <, > =, < =
    우 리 는 각종 필터 기록 방식 을 살 펴 보 자.
    $ awk ' $3>0 {print $0}'netstat.txt
    Proto Recv-Q Send-Q Local-Address          Foreign-Address             State
    tcp        0   4166 coolshell.cn:80        61.148.242.38:30901         ESTABLISHED
    tcp        0      1 coolshell.cn:80        124.152.181.209:26825       FIN_WAIT1
    tcp        0      1 coolshell.cn:80        208.115.113.92:50601        LAST_ACK

    만약 에 우리 가 헤더 가 필요 하 다 면 내부 변수 NR 를 도입 할 수 있 습 니 다.
    $ awk '$3==0 && $6=="LISTEN" || NR==1 'netstat.txt
    Proto Recv-Q Send-Q Local-Address          Foreign-Address             State
    tcp        0      0 0.0.0.0:3306           0.0.0.0:*                   LISTEN
    tcp        0      0 0.0.0.0:80             0.0.0.0:*                   LISTEN
    tcp        0      0 127.0.0.1:9000         0.0.0.0:*                   LISTEN
    tcp        0      0 :::22                  :::*                        LISTEN

    포맷 출력 추가:
    $ awk '$3==0 && $6=="LISTEN" || NR==1 {printf "%-20s %-20s %s
    ",$4,$5,$6}'netstat.txt Local-Address Foreign-Address State 0.0.0.0:3306 0.0.0.0:* LISTEN 0.0.0.0:80 0.0.0.0:* LISTEN 127.0.0.1:9000 0.0.0.0:* LISTEN :::22 :::* LISTEN

    내장 변수
    내장 변 수 를 말 하면 awk 의 내장 변 수 를 볼 수 있 습 니 다.
    $0
    현재 기록 (이 변수 에는 전체 줄 의 내용 이 저장 되 어 있 습 니 다)
    $1~$n
    현재 기 록 된 n 번 째 필드, 필드 간 FS 로 구 분 됩 니 다.
    FS
    입력 필드 구분자 기본 값 은 빈 칸 이나 Tab 입 니 다.
    NF
    현재 기록 중인 필드 개 수 는 몇 개의 열 이 있 습 니까?
    NR
    이미 읽 은 기록 수 는 줄 번호 입 니 다. 1 부터 여러 파일 이 있 으 면 이 값 도 계속 누적 되 고 있 습 니 다.
    FNR
    현재 기록 수 는 NR 와 달리 이 값 은 각 파일 의 줄 번호 입 니 다.
    RS
    입력 한 기록 구분자, 기본 값 은 줄 바 꿈 문자 입 니 다.
    OFS
    출력 필드 구분자, 기본 값 도 공백
    ORS
    출력 기록 구분자
    FILENAME
    현재 입력 한 파일 의 이름
    어떻게 사용 합 니까? 예 를 들 어 우리 가 줄 번 호 를 출력 하려 면:
    $ awk '$3==0 && $6=="ESTABLISHED" || NR==1 {printf "%02s %s %-20s %-20s %s
    ",NR, FNR, $4,$5,$6}'netstat.txt 01 1 Local-Address Foreign-Address State 07 7 coolshell.cn:80 110.194.134.189:1032 ESTABLISHED 08 8 coolshell.cn:80 123.169.124.111:49809 ESTABLISHED 10 10 coolshell.cn:80 123.169.124.111:49829 ESTABLISHED 14 14 coolshell.cn:80 110.194.134.189:4796 ESTABLISHED 17 17 coolshell.cn:80 123.169.124.111:49840 ESTABLISHED

    지정 구분자
    $  awk  'BEGIN{FS=":"} {print $1,$3,$6}'/etc/passwd
    root 0 /root
    bin 1 /bin
    daemon 2 /sbin
    adm 3 /var/adm
    lp 4 /var/spool/lpd
    sync 5 /sbin
    shutdown6/sbin
    halt 7 /sbin

    위의 명령 도 다음 과 같다. (- F 는 구분자 지정)
    $ awk  -F: '{print $1,$3,$6}'/etc/passwd

    주: 만약 당신 이 여러 개의 구분자 를 지정 하려 고 한다 면, 당신 은 이렇게 할 수 있 습 니 다.
    awk -F '[;:]'

    구분자 로 출력 하 는 예 를 보 겠 습 니 다. (아래/etc/passwd 파일 을 사 용 했 습 니 다. 이 파일 은: 구 분 된 것 입 니 다)
    $ awk  -F: '{print $1,$3,$6}'OFS="\t"/etc/passwd
    root    0       /root
    bin     1       /bin
    daemon  2       /sbin
    adm     3       /var/adm
    lp      4       /var/spool/lpd
    sync   5      /sbin

    셔츠 를 벗다
    문자열 일치
    우 리 는 몇 개의 문자열 이 일치 하 는 예 시 를 다시 보 았 다.
    $ awk '$6 ~ /FIN/ || NR==1 {print NR,$4,$5,$6}'OFS="\t"netstat.txt
    1       Local-Address   Foreign-Address State
    6       coolshell.cn:80 61.140.101.185:37538    FIN_WAIT2
    9       coolshell.cn:80 116.234.127.77:11502    FIN_WAIT2
    13      coolshell.cn:80 124.152.181.209:26825   FIN_WAIT1
    18      coolshell.cn:80 117.136.20.85:50025     FIN_WAIT2
     
    $ $ awk '$6 ~ /WAIT/ || NR==1 {print NR,$4,$5,$6}'OFS="\t"netstat.txt
    1       Local-Address   Foreign-Address State
    5       coolshell.cn:80 124.205.5.146:18245     TIME_WAIT
    6       coolshell.cn:80 61.140.101.185:37538    FIN_WAIT2
    9       coolshell.cn:80 116.234.127.77:11502    FIN_WAIT2
    11      coolshell.cn:80 183.60.215.36:36970     TIME_WAIT
    13      coolshell.cn:80 124.152.181.209:26825   FIN_WAIT1
    15      coolshell.cn:80 183.60.212.163:51082    TIME_WAIT
    18      coolshell.cn:80 117.136.20.85:50025     FIN_WAIT2

    위의 첫 번 째 예 는 FIN 상태 와 일치 하고 두 번 째 예 는 WAIT 문자 와 일치 하 는 상태 입 니 다.사실 ~ 표시 모드 시작.모드이것 이 바로 정규 표현 식 의 일치 입 니 다.
    사실 awk 는 grep 처럼 첫 줄 과 일치 할 수 있 습 니 다. 이렇게:
    $ awk '/LISTEN/'netstat.txt
    tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN
    tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN
    tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN
    tcp        0      0 :::22                   :::*                    LISTEN

    우 리 는 "/FIN | TIME/"를 사용 하여 FIN 이나 TIME 에 일치 할 수 있 습 니 다.
    $ awk '$6 ~ /FIN|TIME/ || NR==1 {print NR,$4,$5,$6}'OFS="\t"netstat.txt
    1       Local-Address   Foreign-Address State
    5       coolshell.cn:80 124.205.5.146:18245     TIME_WAIT
    6       coolshell.cn:80 61.140.101.185:37538    FIN_WAIT2
    9       coolshell.cn:80 116.234.127.77:11502    FIN_WAIT2
    11      coolshell.cn:80 183.60.215.36:36970     TIME_WAIT
    13      coolshell.cn:80 124.152.181.209:26825   FIN_WAIT1
    15      coolshell.cn:80 183.60.212.163:51082    TIME_WAIT
    18      coolshell.cn:80 117.136.20.85:50025     FIN_WAIT2

    다시 모드 에서 반대 하 는 예 를 보 자.
    $ awk '$6 !~ /WAIT/ || NR==1 {print NR,$4,$5,$6}'OFS="\t"netstat.txt
    1       Local-Address   Foreign-Address State
    2       0.0.0.0:3306    0.0.0.0:*       LISTEN
    3       0.0.0.0:80      0.0.0.0:*       LISTEN
    4       127.0.0.1:9000  0.0.0.0:*       LISTEN
    7       coolshell.cn:80 110.194.134.189:1032    ESTABLISHED
    8       coolshell.cn:80 123.169.124.111:49809   ESTABLISHED
    10      coolshell.cn:80 123.169.124.111:49829   ESTABLISHED
    12      coolshell.cn:80 61.148.242.38:30901     ESTABLISHED
    14      coolshell.cn:80 110.194.134.189:4796    ESTABLISHED
    16      coolshell.cn:80 208.115.113.92:50601    LAST_ACK
    17      coolshell.cn:80 123.169.124.111:49840   ESTABLISHED
    19      :::22   :::*    LISTEN

    또는:
    awk '!/WAIT/' netstat.txt

    환산 서류
    awk 분할 파일 은 간단 합 니 다. 방향 을 바 꾸 면 됩 니 다.아래 의 이 예 는 6 번 째 예 로 파일 을 구분 하 는 것 으로 상당히 간단 하 다 (그 중의 NR! = 1 은 표 두 를 처리 하지 않 는 다 는 뜻).
    $ awk 'NR!=1{print > $6}'netstat.txt
     
    $ ls
    ESTABLISHED  FIN_WAIT1  FIN_WAIT2  LAST_ACK  LISTEN netstat.txt  TIME_WAIT
     
    $ catESTABLISHED
    tcp        0      0 coolshell.cn:80        110.194.134.189:1032        ESTABLISHED
    tcp        0      0 coolshell.cn:80        123.169.124.111:49809       ESTABLISHED
    tcp        0      0 coolshell.cn:80        123.169.124.111:49829       ESTABLISHED
    tcp        0   4166 coolshell.cn:80        61.148.242.38:30901         ESTABLISHED
    tcp        0      0 coolshell.cn:80        110.194.134.189:4796        ESTABLISHED
    tcp        0      0 coolshell.cn:80        123.169.124.111:49840       ESTABLISHED
     
    $ catFIN_WAIT1
    tcp        0      1 coolshell.cn:80        124.152.181.209:26825       FIN_WAIT1
     
    $ catFIN_WAIT2
    tcp        0      0 coolshell.cn:80        61.140.101.185:37538        FIN_WAIT2
    tcp        0      0 coolshell.cn:80        116.234.127.77:11502        FIN_WAIT2
    tcp        0      0 coolshell.cn:80        117.136.20.85:50025         FIN_WAIT2
     
    $ catLAST_ACK
    tcp        0      1 coolshell.cn:80        208.115.113.92:50601        LAST_ACK
     
    $ catLISTEN
    tcp        0      0 0.0.0.0:3306           0.0.0.0:*                   LISTEN
    tcp        0      0 0.0.0.0:80             0.0.0.0:*                   LISTEN
    tcp        0      0 127.0.0.1:9000         0.0.0.0:*                   LISTEN
    tcp        0      0 :::22                  :::*                        LISTEN
     
    $ catTIME_WAIT
    tcp        0      0 coolshell.cn:80        124.205.5.146:18245         TIME_WAIT
    tcp        0      0 coolshell.cn:80        183.60.215.36:36970         TIME_WAIT
    tcp        0      0 coolshell.cn:80        183.60.212.163:51082        TIME_WAIT

    지정 한 열 을 파일 로 출력 할 수도 있 습 니 다:
    awk 'NR!=1{print $4,$5 > $6}' netstat.txt

    좀 더 복잡 하 게: (그 중의 if - else - if 문 구 를 주의 하 세 요. awk 는 사실 스 크 립 트 해석 기 임 을 알 수 있 습 니 다)
    $ awk 'NR!=1{if($6 ~/TIME|ESTABLISHED/) print >"1.txt";
    elseif($6 ~/LISTEN/) print >"2.txt";
    elseprint >"3.txt"}' netstat.txt
     
    $ ls?.txt
    1.txt  2.txt  3.txt
     
    $ cat1.txt
    tcp        0      0 coolshell.cn:80        124.205.5.146:18245         TIME_WAIT
    tcp        0      0 coolshell.cn:80        110.194.134.189:1032        ESTABLISHED
    tcp        0      0 coolshell.cn:80        123.169.124.111:49809       ESTABLISHED
    tcp        0      0 coolshell.cn:80        123.169.124.111:49829       ESTABLISHED
    tcp        0      0 coolshell.cn:80        183.60.215.36:36970         TIME_WAIT
    tcp        0   4166 coolshell.cn:80        61.148.242.38:30901         ESTABLISHED
    tcp        0      0 coolshell.cn:80        110.194.134.189:4796        ESTABLISHED
    tcp        0      0 coolshell.cn:80        183.60.212.163:51082        TIME_WAIT
    tcp        0      0 coolshell.cn:80        123.169.124.111:49840       ESTABLISHED
     
    $ cat2.txt
    tcp        0      0 0.0.0.0:3306           0.0.0.0:*                   LISTEN
    tcp        0      0 0.0.0.0:80             0.0.0.0:*                   LISTEN
    tcp        0      0 127.0.0.1:9000         0.0.0.0:*                   LISTEN
    tcp        0      0 :::22                  :::*                        LISTEN
     
    $ cat3.txt
    tcp        0      0 coolshell.cn:80        61.140.101.185:37538        FIN_WAIT2
    tcp        0      0 coolshell.cn:80        116.234.127.77:11502        FIN_WAIT2
    tcp        0      1 coolshell.cn:80        124.152.181.209:26825       FIN_WAIT1
    tcp        0      1 coolshell.cn:80        208.115.113.92:50601        LAST_ACK
    tcp        0      0 coolshell.cn:80        117.136.20.85:50025         FIN_WAIT2

    통계
    아래 명령 은 모든 C 파일, CPP 파일, H 파일 의 파일 크기 를 합산 합 니 다.
    $ ls-l  *.cpp *.c *.h |awk'{sum+=$5} END {print sum}'
    2511401

    우 리 는 각 connection 상 태 를 통계 하 는 용법 을 다시 보 겠 습 니 다. (우 리 는 프로 그래 밍 의 그림 자 를 볼 수 있 습 니 다. 모두 프로그래머 이 므 로 설명 하지 않 겠 습 니 다. 그 중의 배열 의 용법 에 주의 하 세 요)
    $ awk 'NR!=1{a[$6]++;} END {for (i in a) print i ", " a[i];}'netstat.txt
    TIME_WAIT, 3
    FIN_WAIT1, 1
    ESTABLISHED, 6
    FIN_WAIT2, 3
    LAST_ACK, 1
    LISTEN, 4

    모든 사용자 의 프로 세 스 가 얼마나 많은 메모 리 를 차지 하 는 지 다시 한 번 봅 시다. (주: sum 의 RSS 열)
    $ ps aux | awk'NR!=1{a[$1]+=$6;} END { for(i in a) print i ", " a[i]"KB";}'
    dbus, 540KB
    mysql, 99928KB
    www, 3264924KB
    root, 63644KB
    hchen, 6020KB

    속옷 을 벗다
    awk 스 크 립 트
    위 에서 우 리 는 END 키 워드 를 볼 수 있다.END 는 '모든 줄 을 처리 한 표지' 라 는 뜻 입 니 다. 즉, END 는 BEGIN 을 소개 할 필요 가 있 습 니 다. 이 두 키 워드 는 실행 전과 실행 후의 뜻 을 의미 합 니 다. 문법 은 다음 과 같 습 니 다.
  • BEGIN {이 안 에는 실행 전 문구 가 들 어 있 습 니 다}
  • END {이 안 에는 모든 줄 을 처리 한 후 실행 할 문구 가 들 어 있 습 니 다}
  • {이 안 에는 각 줄 을 처리 할 때 실행 할 문구 가 들 어 있 습 니 다}
  • 이 일 을 분명하게 말 하기 위해 서 우 리 는 아래 의 예 를 살 펴 보 자.
    만약 에 이런 파일 이 있다 고 가정 하면 (학생 성적 표):
    $ catscore.txt
    Marry   2143 78 84 77
    Jack    2321 66 78 45
    Tom     2122 48 77 71
    Mike    2537 87 97 95
    Bob     2415 40 57 62

    우리 awk 스 크 립 트 는 다음 과 같 습 니 다.
    $ catcal.awk
    #!/bin/awk -f
    #   
    BEGIN {
        math = 0
        english = 0
        computer = 0
     
        printf"NAME    NO.   MATH  ENGLISH  COMPUTER   TOTAL
    " printf"---------------------------------------------
    " } # { math+=$3 english+=$4 computer+=$5 printf"%-6s %-6s %4d %8d %8d %8d
    ", $1, $2, $3,$4,$5, $3+$4+$5 } # END { printf"---------------------------------------------
    " printf" TOTAL:%10d %8d %8d
    ", math, english, computer printf"AVERAGE:%10.2f %8.2f %8.2f
    ", math/NR, english/NR, computer/NR }

    실행 결 과 를 살 펴 보 겠 습 니 다. (이렇게 실행 할 수도 있 습 니 다./cal. awk score. txt)
    $ awk-fcal.awkscore.txt
    NAME    NO.   MATH  ENGLISH  COMPUTER   TOTAL
    ---------------------------------------------
    Marry  2143     78       84       77      239
    Jack   2321     66       78       45      189
    Tom    2122     48       77       71      196
    Mike   2537     87       97       95      279
    Bob    2415     40       57       62      159
    ---------------------------------------------
      TOTAL:       319      393      350
    AVERAGE:     63.80    78.60    70.00

    환경 변수
    즉, 스 크 립 트 를 말 했 습 니 다. 환경 변수 와 어떻게 상호작용 하 는 지 살 펴 보 겠 습 니 다. (- v 매개 변수 와 ENVIRON 을 사용 하고 ENVIRON 의 환경 변 수 를 사용 하려 면 export 가 필요 합 니 다)
    $ x=5
     
    $ y=10
    $ exporty
     
    $ echo$x $y
    5 10
     
    $ awk -vval=$x'{print $1, $2, $3, $4+val, $5+ENVIRON["y"]}'OFS="\t"score.txt
    Marry   2143    78      89      87
    Jack    2321    66      83      55
    Tom     2122    48      82      81
    Mike    2537    87      102     105
    Bob     2415    40      62      72

    허드렛일
    마지막 으로 우 리 는 몇 가지 작은 예 를 다시 보 자.
    # file         80  
    awk 'length>80' file
     
    #         IP
    netstat-ntu |awk'{print $5}'| cut-d: -f1 |sort|uniq -c | sort-nr
     
    #  99   
    seq 9 | sed 'H;g'|awk-vRS='''{for(i=1;i<=NF;i++)printf("%dx%d=%d%s", i, NR, i*NR, i==NR?"
    ":"\t")}'

    스스로 훑 어 라
    그 중 일부 지식 에 대해 서 는 gawk 의 매 뉴 얼 을 참조 할 수 있 습 니 다.
  • 내장 변수, 참조:http://www.gnu.org/software/gawk/manual/gawk.html#Built_002din-Variables
  • 흐름 제어 에 있어 다음 과 같다.http://www.gnu.org/software/gawk/manual/gawk.html#Statements
  • 내장 함수, 참조:http://www.gnu.org/software/gawk/manual/gawk.html#Built_002din
  • 정규 표현 식, 참조:http://www.gnu.org/software/gawk/manual/gawk.html#Regexp

  • (전문 완료)
    (본 사이트 의 글 을 옮 겨 실 으 려 면 작성 자 와 출처 쿨 케이스 – CoolShell. cn, 어떠한 상업 용도 로 도 사용 하지 마 십시오)
    ——===
    공익 사업 을 지원 하기 위해 쿨 케이스 404 페이지 를 방문 하 십시오 = = -
    전재 주소

    좋은 웹페이지 즐겨찾기