[하루 셸 명령] 텍스트 내용 조작 시리즈 - awk

7543 단어 shellawk셸 명령
설명:
awk 는 데이터 흐름 에 사용 되 어 열 과 줄 을 조작 할 수 있 도록 설계 되 었 습 니 다.sed 는 일치 합 니 다. 교체 와 삭 제 를 진행 합 니 다.awk 는 배열, 함수 등 내장 기능 이 많 습 니 다.유연성 은 awk 의 가장 큰 장점 이다. 
awk 의 구조 awk 'BEGIN {print "start"} pattern {commands} END {print "end"}' file 은 보기 위해 차 를 되 돌 렸 습 니 다. 사실은 한 줄 입 니 다.
 
하나의 awk 스 크 립 트 는 보통 3 부분 1. BEGIN 구문 블록 2. 패턴 에 맞 는 일반적인 구문 블록 3. END 구문 블록 을 사용 할 수 있 습 니 다. 그들 은 어느 부분 도 스 크 립 트 에 나타 나 지 않 을 수 있 습 니 다.스 크 립 트 는 보통 작은 따옴표 나 작은 따옴표 에 포 함 됩 니 다.예 를 들 면:

  
  
  
  
  1. awk 'BEGIN{i=0}{i++}END{print i}' filename  

 작업 원리
awk 명령 의 작업 방식 은 다음 과 같 습 니 다.
1. BEGIN {commands} 구문 블록 에 있 는 문 구 를 실행 합 니 다.
2. 파일 이나 stdin 에서 한 줄 을 읽 은 다음 pattern {commands} 을 실행 합 니 다. 모두 읽 을 때 까지 교체 합 니 다.
3. 마지막 으로 END {commands} 문장 블록 실행
그들 은 어떤 것 도 없 을 수 있다 는 것 을 다시 한 번 일 깨 워 주 었 다.
awk 기능 도 그 뿐만 이 아니다.
 
입문 실례:

  
  
  
  
  1. echo | awk '{var1="v1";var2="v2";var3="v3"; print var1,var2,var3;}'  
  2. 打印: v1 v2 v3  

설명: 쉼표 는 경계 문자 (구분자) 

  
  
  
  
  1. echo | awk '{var1="v1";var2="v2";var3="v3"; print var1"-"var2"-"var3;}' 

인쇄 v1 - v2 - v3
인용 부호
다른 어떤 기호 도 v1, v2, v3 를 정상적으로 출력 할 수 없습니다.
 
해독 - help (매우 방대 하고 복잡 한 도움말 문서 로 공식 적 으로 410 페이지 의 PDF 로 소개 했다. 만약 내 가 한 마디 만 한다 면 너 는 나 자신 을 믿 어도 믿 지 않 는 다.)
용법: awk [POSIX 또는 GNU 스타일 옵션] - f 스 크 립 트 파일 [--] 파일... 용법: awk [POSIX 또는 GNU 스타일 옵션] [--] '프로그램' 파일... POSIX 옵션:             GNU 롱 옵션:    -f 스 크 립 트 파일        --file = 스 크 립 트 파일    -F fs            --field - separator = fs 입력 텍스트 구분 자 를 지정 합 니 다. fs 는 문자열 이나 정규 표현 식 입 니 다.      -v var=val        --assign = var = val 외부 변수 값 을 var 에 지불 합 니 다.      -m[fr] val     -O            --최적화 프로그램의 내부 표 시 를 사용 합 니 다.      -W compat        --compat 는 호 환 모드 에서 awk 를 실행 합 니 다.그래서 gawk 의 행동 은 표준 awk 와 마찬가지 로 모든 awk 확장 이 무시 되 었 습 니 다.      -W copyleft        --copyleft 짧 은 저작권 정보 인쇄      -W copyright        --copyright 는 단판 의 통용 공공 허가증 을 인쇄 한 후 종료 합 니 다.      -W dump-variables[=file]    --dump - variables [= file] 전역 변 수 를 인쇄 합 니 다. 그 유형, 제출 한 최종 값 의 정렬 목록 입 니 다.      -W exec=file        --exec = file 은 - f 와 유사 하지만 그 와 는 두 가지 가 다르다.      -W gen-po        --gen - po (내용 이 너무 많아)    -W help            --help 인쇄 도움말      -W lint[=fatal]        --lint [= fatal] 경고 수상 하거나 다른 awk 에 이식 되 지 않 은 구조      -W lint-old        --전통 적 인 유 닉 스 플랫폼 에 이식 할 수 없 는 구조 에 대한 경 고 를 인쇄 합 니 다.      -W non-decimal-data    --non - decimal - data 는 자동 입력 데이터 의 해석 을 사용 합 니 다. 8 진법 과 16 진법 값 입 니 다.      -W profile[=file]    --profile [= file] awk 프로그램 분석 사용 하기      -W posix        --poix 는 엄격 한 의미 에서 POSIX 모드 로 작 동 합 니 다.      -W re-interval        --re - interval 은 정규 표현 식 에 간격 표현 식 을 허용 합 니 다.      -W source=program-text    --source=program-text     -W traditional        --전통 적 인 유 닉 스 awk 정규 표현 식 일치      -W usage        --usage     -W use-lc-numeric    --use - lc - numeric 에서 디지털 입력 을 분석 할 때 강제로 사용 하 는 언어 환경 에서 의 소수점 문자 데이터 -W version        --version 오류 보고 서 를 제출 할 때 "gawk. info"의 "Bugs"페이지 를 참고 하 십시오. 인쇄 버 전의 "Reporting Problems and Bugs"절 에 있 습 니 다. 
메모: gawk 는 awk 의 GNU 버 전 입 니 다. help 라 도 ubuntu 에 gawk 를 먼저 설치 해 야 합 니 다.
이번 에는 읽 지 않 겠 습 니 다. 여러분 의 정보 와 즐거움 을 높이 기 위해 기본 적 인 것 부터 하 겠 습 니 다.
부분 특수 변수:
NR: 기록 수량 을 표시 하고 실행 과정 에서 줄 번호 에 대응 합 니 다.
NF: 필드 수 를 표시 합 니 다. 실행 과정 에서 현재 줄 에 대응 하 는 필드 수 입 니 다.
$0: 이 변 수 는 실행 과정 에서 현재 줄 의 텍스트 내용 을 포함 합 니 다.
$1: 첫 번 째 필드 의 텍스트 내용
$2: 두 번 째 필드 의 텍스트 내용
 
예:
예 1.

  
  
  
  
  1. echo -e "line1 f2 f3
    line2 f4 f5
    line3 f6 f7"|\#这个\是在窗口中写多行命令用的  
  2. awk '{  
  3. print "Line no:"NR",No of fields:"NF, "$0="$0,"$1="$1,"$2="$2,"$3="$3  
  4. }'  

주석: $1 은 첫 번 째, $NF 는 마지막 필드, $(NF - 1) 는 마지막 두 번 째 필드 를 인쇄 합 니 다.
 예 2.

  
  
  
  
  1. seq 5 | awk 'BEGIN{ sum=0;print "Summation:"}{print $1"+";sum+=1}END{print "==";print sum}' 

이 예 는 기본 격식 을 사용 했다.
BEGIN 에서 sum 을 초기 화 하고 Summation 을 인쇄 합 니 다.
중간 모듈 에서 첫 번 째 열 을 인쇄 한 다음 sum + 1 을 드 립 니 다.
END 에 sum 이 인쇄 되 었 습 니 다.
 예 3. 관련 - v 외부 변수 
 

  
  
  
  
  1. VAR=10000 
  2. $echo | awk –v VARIABLE=$VAR'{print VARABLE}' 

또 다른 유연 한 방법 은 여러 개의 외부 변 수 를 awk 에 전달 할 수 있다. 예 를 들 어:

  
  
  
  
  1. $var1="value1" var2="value2" 
  2. $echo | awk '{print v1,v2}' v1=$var1 v2=$var2 

하면, 만약, 만약...

  
  
  
  
  1. awk '{print v1,v2}' v1=$var1 v2=$var2 filename 

 예 4
$awk 'NR < 5 '\# 줄 번호 가 5 보다 작 음
$awk 'NR = = 1, NR = = 4'\# 줄 번호 가 1 에서 5 사이 인 줄
$awk '/linux/'\# 스타일 Liux 를 포함 하 는 줄 (정규 표현 식 으로 스타일 을 지정 할 수 있 습 니 다)
$awk '!/linux/'\# 스타일 linux 줄 을 포함 하지 않 습 니 다.
 
이번 에는 먼저 이 글 을 써 서 2 장 을 써 서 awk 를 비교적 전면적 인 인식 을 할 수 있 도록 하 겠 습 니 다.

좋은 웹페이지 즐겨찾기