awk 명령 입 니까? 프로 그래 밍 언어 입 니까?
뭐 공부 해요?
awk 는 Liux 의 다음 명령 입 니 다. 그 는 다른 명령 에 대한 출력 으로 파일 에 대한 처리 가 매우 강 합 니 다. 사실은 그 는 프로 그래 밍 언어 와 같 습 니 다. 그 는 변 수 를 사용자 정의 할 수 있 습 니 다. 조건 부, 순환, 배열, 정규, 함수 등 이 있 습 니 다.그 가 출력 을 읽 거나 파일 을 읽 는 방식 은 한 줄, 한 줄 의 읽 기, 당신 이 제시 한 조건 에 따라 찾 고 찾 은 줄 에서 조작 하 는 것 입 니 다. 그의 디자인 사상 은 정말 간단 하 다 고 생각 하지만 실제 상황 과 결합 하여 구체 적 으로 조작 하 는 것 은 그리 간단 하지 않 습 니 다.그 는 세 가지 형세 가 있 는데, awk, gawk, nawk, 평소에 말 하 는 awk 는 사실 gawk 이다.
2. awk 의 기록, 도 메 인, 분할 자
출력 을 읽 거나 파일 을 읽 을 때 한 줄 을 읽 는 것 이 기록 입 니 다.기록 분할 부 호 는 RS, ORS 에 저장 되 는 기본 값 인 리 턴 부호 입 니 다.
우 리 는 기록 에서 우리 가 원 하 는 단어 나 어구 등 을 나 누 었 습 니 다. 우 리 는 그 를 도 메 인, 도 메 인 분할 문자 라 고 부 릅 니 다. 기본 적 인 것 은 빈 칸 과 TAB 입 니 다.
ORS 중.예 를 들 어:
aaaa:bbbb:ccccccc
1111:2343:5t43343
위 에 두 줄 이 있 습 니 다. 이 두 줄 은 두 개의 기록 입 니 다. 각 줄 뒤의 차 는 바로 분할 부 호 를 기록 하 는 것 입 니 다. 안에 있 는 사칭 은 바로 도 메 인 분할 부 입 니 다. 분 단 된 것 입 니 다. aaaa, 1111 과 같은 것 이 도 메 인 입 니 다.
awk -F: '{print $1}' testfile
3. awk 의 내장 변수 와 연산 자
변수
변량
묘사 하 다.
$n
현재 기 록 된 n 번 째 필드 입 니 다. 필드 간 은 FS 로 구 분 됩 니 다.
$0
완전한 입력 기록.
ARGC
명령 행 인자 의 수 입 니 다.
ARGIND
명령 행 에 있 는 현재 파일 의 위치 (0 부터 계산).
ARGV
명령 행 인 자 를 포함 하 는 배열 입 니 다.
CONVFMT
디지털 변환 형식 (기본 값%. 6g)
ENVIRON
환경 변수 관련 배열.
ERRNO
마지막 시스템 오류 설명
FIELDWIDTHS
필드 너비 목록 (스페이스 바 로 구분).
FILENAME
현재 파일 이름 입 니 다.
FNR
NR 와 같 지만 현재 파일 에 비해.
FS
필드 구분자.
IGNORECASE
만약 사실 이 라면 대소 문자 의 일치 성 을 무시 합 니 다.
NF
현재 기록 중인 필드 수 입 니 다.
NR
현재 기록 수.
OFMT
숫자의 출력 형식 (기본 값 은%. 6g) 입 니 다.
OFS
출력 필드 구분자 (기본 값 은 빈 칸).
ORS
출력 기록 구분자 (기본 값 은 줄 바 꿈 문자).
RLENGTH
match 함수 에 일치 하 는 문자열 의 길이 입 니 다.
RS
기록 구분자 (기본 값 은 줄 바 꿈 문자).
RSTART
match 함수 에 일치 하 는 문자열 의 첫 번 째 위치 입 니 다.
SUBSEP
배열 아래 에 표 시 된 구분자 (기본 값 은 \ 034) 입 니 다.
2, 연산 자
연산 자
묘사 하 다.
= += -= *= /= %= ^= **=
값 을 부여 하 다
?:
C 조건 식
||
논리
&&
논리 와
~ ~!
정규 표현 식 과 일치 하지 않 는 정규 표현 식
< <= > >= != ==
관계 연산 자
스페이스 바
잇닿다
+ -
가감
* / &
타다
+ - !
일원 더하기, 감화 논리 비
^ ***
멱 을 구하 다
++ --
접두사 또는 접미사 로 추가 또는 감소
$
필드 참조
in
그룹 구성원
4. awk 의 정규
일치 문자
묘사 하 다.
\Y
단어의 시작 이나 끝 에 있 는 빈 문자열 과 일치 합 니 다.
\B
단어 에 있 는 빈 문자열 과 일치 합 니 다.
\<
한 단어의 시작 과 일치 하 는 빈 문자열, 닻 시작
\>
한 단어의 끝 에 일치 하 는 빈 문자열, 닻 끝
\W
알파벳 이 아 닌 숫자 로 구 성 된 단어 와 일치 합 니 다.
\w
알파벳 숫자 로 구 성 된 단어 와 일치 합 니 다.
\'
문자열 의 끝 에 일치 하 는 빈 문자열
\‘
문자열 의 시작 과 일치 하 는 빈 문자열
함수
1, 문자열 함수
함수 명
묘사 하 다.
sub
기록 에서 가장 크 고 왼쪽 에 있 는 하위 문자열 과 일치 하 는 정규 표현 식 을 바 꾸 고 문자열 을 바 꿉 니 다.대상 문자열 이 지정 되 지 않 으 면 전체 기록 을 기본 으로 사용 합 니 다.바 꾸 기 는 첫 번 째 일치 할 때 만 발생 합 니 다.
gsub
전체 문서 에서 일치 합 니 다.
index
하위 문자열 이 처음으로 일치 하 는 위 치 를 되 돌려 줍 니 다. 오프셋 은 위치 1 부터 시작 합 니 다.
substr
위치 1 에서 시 작 된 하위 문자열 을 되 돌려 줍 니 다. 실제 길 이 를 초과 하면 전체 문자열 을 되 돌려 줍 니 다.
split
주어진 구분자 에 따라 문자열 을 배열 로 나 눌 수 있 습 니 다.구분자 가 제공 되 지 않 으 면 현재 FS 값 으로 분할 합 니 다.
length
기 록 된 문자 수 를 되 돌려 줍 니 다.
match
문자열 의 정규 표현 식 위치 에 있 는 색인 을 되 돌려 줍 니 다. 지정 한 정규 표현 식 을 찾 지 못 하면 0 을 되 돌려 줍 니 다.match 함 수 는 내장 변수 RSTART 를 문자열 중성자 문자열 의 시작 위치 로 설정 합 니 다. RLENGTH 는 하위 문자열 의 끝 에 있 는 문자 갯 수 입 니 다.substr 는 문자열 을 캡 처 하 는 데 유리 합 니 다.
toupper 와 tolower
문자열 크기 간 변환 에 사용 할 수 있 습 니 다. 이 기능 은 gawk 에서 만 유효 합 니 다.
2, 수학 함수
함수 명
반환 값
atan2(x,y)
y, x 범위 내의 나머지
cos(x)
코사인 함수
exp(x)
멱 을 구하 다
int(x)
정돈 하 다
log(x)
자연 대수
rand()
난수
sin(x)
정 현
sqrt(x)
제곱 근
srand(x)
x 는 rand () 함수 의 피 드 입 니 다.
int(x)
정돈, 과정 반올림 없 음
rand()
0 보다 크 고 1 보다 작은 무 작위 수 를 만 듭 니 다.
실례
awk 를 공부 할 때 예 를 들 었 습 니 다. 물건 을 배 웠 습 니 다. 보기 만 하면 기억 이 안 납 니 다.보기 만 하면 어떻게 된 일 인지 알 수 있 을 것 이다. 진정 으로 실제 조작 하 는 것 은 여기에 문제 가 있 는 것 이 아니 라 거기에 문제 가 있 는 것 이다.그 러 니까 직접 해 봐 야 돼.
1, 테스트 파일 test
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/bin/false
daemon:x:2:2:daemon:/sbin:/bin/false
mail:x:8:12:mail:/var/spool/mail:/bin/false
ftp:x:14:11:ftp:/home/ftp:/bin/false
&nobody:$:99:99:nobody:/:/bin/false
zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash
http:x:33:33::/srv/http:/bin/false
dbus:x:81:81:System message bus:/:/bin/false
hal:x:82:82:HAL daemon:/:/bin/false
mysql:x:89:89::/var/lib/mysql:/bin/false
aaa:x:1001:1001::/home/aaa:/bin/bash
ba:x:1002:1002::/home/zhangy:/bin/bash
test:x:1003:1003::/home/test:/bin/bash
@zhangying:*:1004:1004::/home/test:/bin/bash
policykit:x:102:1005:Po
예 1:
cat test | awk -F: '{\
if ($1 == "root"){\
print $1;\
}else if($1 == "bin"){\
print $2;\
}else{\
print $3;\
} \
}'
예 2:
awk '{\
for(i=0;i<NF;i++){\
if ($i ~/^root/){\
print $i;\
}else if($i ~/zhangy/){\
print $i;continue;\
}else if($i ~/mysql/){\
print $i;next;\
}else if($i ~/^test/){\
print $i;break;\
} \
}\
}' test
예 3:
tail test | awk 'BEGIN{while(getline d){ split(d,test);for(i in test){\
print test[i]\
}}}'
예 4:
ls -al /home/zhangy/mytest | awk 'BEGIN{while(getline d){ split(d,test);\
print test[9] ;}
}'
예 5:
echo "32:34" |awk -F: '{print "max = ",max($1,$2)}\
function max(one,two){
if(one > two){
return one;
}else{
return two;
}
}
'
예 6:
#awk 'BEGIN{print "what is your name"; getline name < "/dev/tty"}$1 ~name{print
#"found name on line" NR}END{print "see you" name}' test
#awk '{sub(/daemon/,"tankzhang");print}' test
#awk '{{sub(/zhangy/,"tankzhang");$1};print}' test
#awk '{{gsub(/zhangy/,"tankzhang");$1};print}' test
#awk -F: '{print index("zhangy",$1)}' test
#awk -F: '{print substr($1,1,2)}' test
awk -F: '{mat=match($1,/^[a-zA-Z]+$/);print mat,RSTART,RLENGTH}' test
예 7:
cat test |awk -F: '\
NF != 7{\
printf("line %d,does not have 7 fields:%s
",NR,{1})}\
$1 !~ /^[A-Za-z0-9]/{printf("line %d,non alpha and numeric user id:%s: %s
",NR,$1,{1})}\
$2 == "*" {printf("lind %d,no password:%s
",NR,{1})}'
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Linux Shell 프로 그래 밍 - 텍스트 처리 grep, sed사용자 가 지정 한 '모드' 에 따라 대상 텍스트 를 일치 하 게 검사 하고 일치 하 는 줄 을 인쇄 합 니 다. ##포함 되 지 않 음, 역방향 일치 \ ##키워드 앞 뒤 가 맞지 않 고 키워드 만 일치 합 니 다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.