AWK 문자열 처리

4579 단어
문자열 처리 의 또 다른 강력 한 도 구 는 AWK 입 니 다. SED 와 달리 AWK 는 문자열 을 구분 하고 열 처 리 를 잘 합 니 다.
문법
awk [- F re] [parameter...] ['prog'] [- f progfile] 매개 변수 설명: - F re: awk 가 필드 구분 자 를 변경 할 수 있 도록 합 니 다. 기본 값 은 빈 칸 입 니 다.parameter: 이 매개 변 수 는 서로 다른 변수 에 값 을 부여 하 는 데 도움 을 줍 니 다. 'prog ': awk 프로그램 구문.이 문 구 는 셸 에 의 해 해석 되 지 않도록 단일 탁본 번호: '와' 괄호 로 묶 어야 합 니 다.이 프로그램의 표준 형식 은 'pattern {action}' - f progfile: AWK 문법 을 만족 시 키 는 프로그램 파일 입 니 다.
상용 내장 변수
FIELDWIDTHS
공백 으로 구 분 된 필드 너비 입 니 다. 이 변 수 를 지정 하면 awk 는 지정 한 너비 로 변수 FS 가 지정 한 구분자 로 바 꿉 니 다.
echo "abcdefghijkl" | awk 'BEGIN {FIELDWIDTHS="2 3 4"}'
输出: ab cde fghi

NF
현재 기 록 된 필드 갯 수 입 니 다.
NR
이미 읽 은 기록 수.
FILENAME 파일 이름
OFS
출력 필드 구분자, 기본 값 도 빈 칸, 탭 문자 등 으로 변경 할 수 있 습 니 다.
ORS
출력 기록 구분자, 기본 값 은 줄 바 꿈 문자, 즉 처리 결과 도 한 줄 한 줄 로 화면 에 출력 합 니 다.
내장 함수
gsub(r,s)
전체 $0 에서 r 대신 s 를 사용 합 니 다.
gsub(r,s,t)
전체 t 에서 s 로 r 를 대체 합 니 다.
index(s,t)
s 에서 문자열 t 의 첫 번 째 위 치 를 되 돌려 줍 니 다.
length(s)
s 길이 되 돌리 기
match(s,r)
s 가 r 와 일치 하 는 문자열 을 포함 하 는 지 테스트 합 니 다.
split(s,a,fs)
fs 에서 s 를 서열 a 로 나누다
sprint(fmt,exp)
fmt 포맷 후 exp
sub(r,s)
s 대신 0 달러 중 가장 왼쪽 에 있 는 가장 긴 하위 문자열 을 사용 합 니 다.
substr(s,p)
p 에서 시작 하 는 접미사 부분 을 문자열 s 로 되 돌려 줍 니 다.
substr(s,p,n)
문자열 s 의 p 부터 n 의 접미사 부분 을 되 돌려 줍 니 다.
상용 실례
기본 출력 형식
awk  -F: '{print $1,$3,$6}' OFS="\t" file_name 

: 구분자, 출력 필드 1, 3, 6, 탭 문 자 를 구분자 로 합 니 다.
awk -F: 'NR==4 || NR==8{print}'  file_name      

다섯 번 째 줄 과 여섯 번 째 줄 보이 기
정규 일치 출력
//순수 문자 일치!/순수 문자 가 일치 하지 않 습 니 다 ~/필드 값 이 일치 하지 않 습 니 다! ~/필드 값 이 일치 하지 않 습 니 다 ~/a1 | a2/필드 값 이 a1 또는 a2 와 일치 하지 않 습 니 다.
awk '/mysql/{print $0}' file_name

"mysql"과 일치 하 는 줄 전체 출력 보이 기
awk '!/mysql/{print $0}' file_name

"mysql"과 일치 하 는 줄 전체 출력 보이 기
awk -F: '$1!~/mail|mysql/{print $1}'  file_name
awk -F: '{if($1!~/mail|mysql/)print $1}'  file_name

필드 1 이 mail 이나 my sql 과 일치 해 야 필드 1 을 표시 합 니 다.
begin … end
awk  -F ':'  'BEGIN {print "name,shell"}  {print $1","$7} END {print "blue,/bin/nosh"}' file_name

먼저 BEGIN 을 실행 한 다음 에 파일 을 읽 고/n 줄 바 꿈 문자 로 분 단 된 기록 을 읽 은 다음 에 기록 을 지정 한 도 메 인 구분자 에 따라 도 메 인 을 구분 하고 도 메 인 을 채 우 며 0 은 모든 도 메 인 을 표시 하고 0 은 모든 도 메 인 을 표시 하 며 1 은 첫 번 째 도 메 인 을 표시 하고 $n 은 n 번 째 도 메 인 을 표시 한 다음 에 모드 에 대응 하 는 동작 action 을 실행 합 니 다.이 어 두 번 째 기록 을 읽 기 시 작 했 습 니 다.
print 와 printf 형식 출력
출력 을 출력 할 때 필드 간 의 빈 칸 수 를 지정 하여 열 을 정렬 해 야 할 수도 있 습 니 다.print 함수 에서 탭 문 자 를 사용 하면 원 하 는 출력 을 보장 할 수 없 기 때문에 printf 함수 로 특별한 출력 을 포맷 할 수 있 습 니 다.
서식 설명자
기능.
%c
단일 ASCII 문자 인쇄
%d
10 진수 인쇄
%e
숫자 를 인쇄 하 는 e 기수법 형식
%f
부동 소수점 인쇄
%o
숫자 를 인쇄 하 는 8 진법
%s
문자열 인쇄
%x
인쇄 숫자의 16 진수 값
-
왼쪽 정렬 수정자
#
8 진 정 수 를 표시 할 때 앞 에 0 을 추가 하고 16 진 정 수 를 표시 할 때 앞 에 0 x 를 추가 합 니 다.
+
d, e, f, g 변환 정 수 를 표시 할 때 플러스 + 또는 -
0
표시 되 는 값 을 공백 문자 가 아 닌 0 으로 채 웁 니 다.
awk  -F ':'  '{printf("filename:%10s,linenumber:%s,columns:%s,linecontent:%s
",FILENAME,NR,NF,$0)}'
file_name

좋은 웹페이지 즐겨찾기