면책 조항 :이 문서는 블로거 hanchao5272 원저이며, 소스를 표시하고 원래의 링크 주소를 남겨주세요, 감사합니다! https://blog.csdn.net/hanchao5272/article/details/89205819
: 시리즈 카탈로그는 포털 참고 입문 연구 노트 쉘 - 프롤로그
AWK 내장 함수
기능 | 기술 |
---|---|
int(expr) |
정수로 잘린다 |
sqrt(expr) |
제곱근 |
rand() |
난수 반환 N , 0 및 1 범위,0<N<1 |
srand([expr]) |
지정되지 않은 경우 expr이, 난수를 생성하는 데 사용, 기본 씨앗 현재 시간은 이전 난수 시드를 사용하는 경우 생성 |
asort(a,b) |
배열의 값이 정렬 된 새로운 배열에 저장된 값을 정렬 b 하는 새로운 배열 첨자은 정렬 1 시작 |
asorti(a,b) |
어레이의 첨자는 정렬 문헌 |
sub(r,s[,t]) |
입력 기록함으로써 s 선택적으로 r , t 스트링의 필드의 선택적 교체 만 교체 |
gsub(r,s[,t]) |
입력 기록하여 s 다른 방법으로 r , t 필드의 선택적 교체, 모든 대체 |
match(str, regex) |
테스트 문자열이 str 일치 포함 regex 문자열을 |
index(str,sub) |
문자열 str을 인덱스 서브가 반환 0 더를이 있음 |
length(str) length(arr) |
STR의 길이는 반환 배열 편곡의 사이즈를 돌려줍니다 |
split(str, arr,regex) |
세퍼레이터 regex 한다 str 배열로 분할arr |
substr(s,i[,n]) |
문자열 촬영 s 에서 i 길이에 시작 n 하는 경우, n 지정되지 않은 나머지 부분을 |
tolower(str) |
str 모든 대문자를 소문자로 변환 |
toupper(str) |
str 모든 소문자가 대문자로 |
systime() |
초 현재 시간 |
mktime() |
시간 (초)로 포맷 시간을 변환 |
strftime([format[,timestamp[,utc-flag]]]) |
포맷 출력 시간, 문자열에 타임 스탬프 |
INT (VAR)를 잘라 내기
admindeMacBook-Pro:myshell admin$ echo "111 11.1 11a 11a1" |awk '{for(i=1;i<=NF;i++) print $i}'
111
11.1
11a
11a1
admindeMacBook-Pro:myshell admin$ echo "111 11.1 11a 11a1" |awk '{for(i=1;i<=NF;i++) print int($i)}'
111
11
11
11
admindeMacBook-Pro:myshell admin$ echo "111 11.1 11a 11a1" |awk '{for(i=1;i<=NF;i++) print +$i}'
111
11.1
11
11
int(var)
가로 챌 수있는var
첫 번째 등장整数
int(var)
그것은 차단의 정수이고,이되어야+var
구별.
제곱근 SQRT (EXPR)
admindeMacBook-Pro:myshell admin$ awk 'BEGIN{print sqrt(9)}'
3
난수 랜드 () 및부터 srand ()
rand()
생성 된 값이 상기 범위에 고정되어 (0)
admindeMacBook-Pro:~ admin$ awk 'BEGIN{print rand()};'
0.840188
admindeMacBook-Pro:~ admin$ awk 'BEGIN{print rand()};'
0.840188
admindeMacBook-Pro:~ admin$ awk 'BEGIN{print rand();print rand()}'
0.840188
0.394383
admindeMacBook-Pro:~ admin$ awk 'BEGIN{print rand()};'
0.840188
rand()
필요 srand()
, 수 있습니다 생성 전송하는 값의 변화를 만들기 위해 결합 srand()
임의의 씨앗 방법이 변경으로의 생각을 :
admindeMacBook-Pro:~ admin$ awk 'BEGIN{srand();print rand()};'
0.424539
admindeMacBook-Pro:~ admin$ awk 'BEGIN{srand();print rand()};'
0.780827
으로 rand()
하는 생성 1~100
덜 임의의 숫자를 :
admindeMacBook-Pro:~ admin$ awk 'BEGIN{srand();print int(rand()*100)};'
63
admindeMacBook-Pro:~ admin$ awk 'BEGIN{srand();print int(rand()*100)};'
49
정렬 정렬 표준 배열 값에 따라 asort (a, b) 및 하부 어레이 asorti (a, b)
数组值排序asort(a,b)和数组下标排序asorti(a,b)
어레이는 B로 정렬 된 후 숫자가 배열된다.
# 原始数组
admindeMacBook-Pro:~ admin$ echo 0 |awk 'BEGIN{a[1]="line11";a[3]="line09";a[4]="line12";a[8]="line10"}{for(v in a) print "a["v"]="a[v]}'
a[4]=line12
a[8]=line10
a[1]=line11
a[3]=line09
# asort按照值排序
admindeMacBook-Pro:~ admin$ echo 0 |awk 'BEGIN{a[1]="line11";a[3]="line09";a[4]="line12";a[8]="line10"}{N=asort(a,b);for(j=1;j<=N;j++) print "b["j"]="b[j]}'
b[1]=line09
b[2]=line10
b[3]=line11
b[4]=line12
# asorti按照下标排序
admindeMacBook-Pro:~ admin$ echo 0 |awk 'BEGIN{a[1]="line11";a[3]="line09";a[4]="line12";a[8]="line10"}{N=asorti(a,b);for(j=1;j<=N;j++) print "b["j"]="b[j]}'
b[1]=1
b[2]=3
b[3]=4
b[4]=8
asort
하기 위해值
배열로 결과를 정렬b
, 배열 인덱스는 원본을 포기합니다.asorti
하기 위해下标
배열로 결과를 정렬b
, 배열은 원래 값을 포기.
대안 적으로 서브 필드 (R, S [t]) 및 글로벌 필드 교체 GSUB (R, S [t])
admindeMacBook-Pro:~ admin$ printf "1 2 3 2 5\n2 5 3 2 1\n1 3 2 1 2\n"
1 2 3 2 5
2 5 3 2 1
1 3 2 1 2
# 替换首个匹配的字段 且 不指定字段
admindeMacBook-Pro:~ admin$ printf "1 2 3 2 5\n2 5 3 2 1\n1 3 2 1 2\n" |awk '{sub(2,0);print $0}'
1 0 3 2 5
0 5 3 2 1
1 3 0 1 2
# 替换全部匹配的字段 且 不指定字段
admindeMacBook-Pro:~ admin$ printf "1 2 3 2 5\n2 5 3 2 1\n1 3 2 1 2\n" |awk '{gsub(2,0);print $0}'
1 0 3 0 5
0 5 3 0 1
1 3 0 1 0
# 替换首个匹配的字段 且 指定字段
admindeMacBook-Pro:~ admin$ printf "1 2 3 2 5\n2 5 3 2 1\n1 3 2 1 2\n" |awk '{sub(2,0,$2);print $0}'
1 0 3 2 5
2 5 3 2 1
1 3 2 1 2
# 替换全部匹配的字段 且 指定字段
admindeMacBook-Pro:~ admin$ printf "1 2 3 2 5\n2 5 3 2 1\n1 3 2 1 2\n" |awk '{gsub(2,0,$2);print $0}'
1 0 3 2 5
2 5 3 2 1
1 3 2 1 2
sub(r,s)
각 행은 첫 번째 매칭 필드 교체.gsub(r,s)
각 행의 모든 일치하는 레코드 필드 교체.sub(r,s)
sub(r,s,t)
차이점은 후자는 특정 필드와 일치하려고한다는 것입니다.
정규 경기 경기 (STR, 정규식)
# 存在
admindeMacBook-Pro:~ admin$ awk 'BEGIN{print match("abc123","123")}'
4
# 不存在
admindeMacBook-Pro:~ admin$ awk 'BEGIN{print match("abc123","321")}'
0
문자열 색인 지수 (STR, 하위)
# 单个字符的索引
admindeMacBook-Pro:~ admin$ awk 'BEGIN{print index("hello","h")}'
1
admindeMacBook-Pro:~ admin$ awk 'BEGIN{print index("hello","e")}'
2
# 连续字符的索引
admindeMacBook-Pro:~ admin$ awk 'BEGIN{print index("hello","he")}'
1
admindeMacBook-Pro:~ admin$ awk 'BEGIN{print index("hello","el")}'
2
# 首个匹配的字符
admindeMacBook-Pro:~ admin$ awk 'BEGIN{print index("hello","l")}'
3
# 不存在时,结果为0
admindeMacBook-Pro:~ admin$ awk 'BEGIN{print index("hello","k")}'
0
- 시작 인덱스 위치 1에서 0이 없음을 나타냅니다.
- 복수의 일치가 존재하면, 결과는 첫 번째 일치하는 인덱스를 나타낸다.
문자열 길이의 길이 ([S])
admindeMacBook-Pro:~ admin$ awk 'BEGIN{a="1111";print length(a)}'
4
admindeMacBook-Pro:~ admin$ awk 'BEGIN{a[1]="1111";a[3]="2222";print length(a)}'
2
length(var)
: VAR의 길이length(arr)
: 배열의 크기 도착
분할 분할 (캐릭터, 편곡, 정규식)
admindeMacBook-Pro:~ admin$ awk 'BEGIN{str="10.20.30.40";split(str,arr,".");for(v in arr) print arr[v]}'
40
10
20
30
admindeMacBook-Pro:~ admin$ awk 'BEGIN{str="10.20.30.40";split(str,arr);for(v in arr) print arr[v]}'
10.20.30.40
admindeMacBook-Pro:~ admin$ awk 'BEGIN{str="10 20 30 40";split(str,arr);for(v in arr) print arr[v]}'
40
10
20
30
admindeMacBook-Pro:~ admin$ awk 'BEGIN{FS=".";str="10.20.30.40";split(str,arr);for(v in arr) print arr[v]}'
40
10
20
30
- 더 구분이 경우
regex
분리 문자 FS로 사용되지 않습니다.
차단 문자열 SUBSTR (S, I [N])
admindeMacBook-Pro:~ admin$ awk 'BEGIN{str="123haha";print substr(str,3)}'
3haha
admindeMacBook-Pro:~ admin$ awk 'BEGIN{str="123haha";print substr(str,3,2)}'
3h
substr(s,i)
:이 끝날 때까지, 모든 I부터 문자열의 가로 채기.substr(s,i,n)
모든 시작, 문자열의 가로 채기 난, 절편 길이는 N이다.
케이스 변환 tolower를 (들)과의 ToUpper (들)
admindeMacBook-Pro:~ admin$ awk 'BEGIN{s="Hello World";print s;print tolower(s);print toupper(s)}'
Hello World
hello world
HELLO WORLD
시스템 시간 SYSTIME, mktime은과의 strftime
저자 systime
초 취득 시스템 :
admindeMacBook-Pro:~ admin$ awk 'BEGIN{print systime()}'
1551088337
으로 systime("date")
시스템 날짜를 획득 :
admindeMacBook-Pro:~ admin$ awk 'BEGIN{system("date");}'
2019年 02月 25日 星期一 17:55:39 CST
으로 초 날짜 형식 변환의 시간 :mktime(dataspec)
"YYYY MM DD HH MM SS"
admindeMacBook-Pro:~ admin$ awk 'BEGIN{print systime()}'
1551088808
admindeMacBook-Pro:~ admin$ awk 'BEGIN{print mktime("2019 02 25 17 57 30")}'
1551088650
저자 strftime([format [, timestamp[, utc-flag]]])
시간 (초) 출력 형식 :
admindeMacBook-Pro:~ admin$ awk 'BEGIN{print strftime("%Y-%m-%d %H:%M:%S",systime())}'
2019-02-25 18:03:00
admindeMacBook-Pro:~ admin$ awk 'BEGIN{print strftime("%Y-%m-%d %H:%M:%S",mktime("2019 02 25 17 57 30"))}'
2019-02-25 17:57:30
여기되는 strftime
형식 문자를 사용할 수 있습니다 :
SN | 기술 |
---|---|
%에이 | 약어 주 (월 - 일). |
%에이 | 주 전체 이름 (월 - 일). |
%비 | 월의 약어 (월). |
%비 | 달의 전체 이름 (년 1 월). |
%기음 | 현지 날짜 및 시간입니다. |
%기음 | 연간 세기 부가 된 연도가 100로 나누어. |
%디 | 진수 날짜 (01-31) |
%디 | %의 m / %의 D / Y %에 상당. |
%이자형 | 만있는 경우 날짜는 1 개 자리는 공백으로 채워집니다 |
%에프 | 당량 % Y- % M- % D는 ISO 8601 표준 데이터 형식이다. |
%지 | 해 ISO8610 표준 주변 금형 (100) 여기서 또한 (00-99). 예를 들어 1 월 1 일 1993 년 1992 년의 첫 번째 53주에 속한다. 는 1 일, 1993 년에했지만, 그 ISO8601 기준 연도 동안 그래서, 주 1992입니다. 마찬가지로, 12 월 (31)하지만, 1973 년 1,973에 속하는하지만 1994 년 첫 주에 속한다. 그래서 ISO8610 주 1973년 12월 31일의 기준은 어디에서 1974 대신 1973입니다. |
%지 | 올해의 전체 이름은 ISO 표준 주. |
%의 시간 | 당량 % 나. |
% H | 진수 표현과 함께 시간 24 시간 형식 (00-23) |
%나는 | 12 시간 형식 진수 표현과 시간 (00-12) |
% j를 | 올해의 처음 몇 일 (001-336) |
%엠 | 달 (01-12) |
%엠 | 시간 (분) (00-59) |
%엔 | 줄 바꿈 (ASCII의 LF) |
%피 | 십이 진법 표기 (AM / PM) |
%아르 자형 | 방법 십이 진법 시간 나타낸다 (I %에 상당하는 %의 M을 %의 S %의 피). |
%아르 자형 | 그것은 %의 H에 상당 % M. |
%에스 | 두번째 값 (00-60) |
%티 | 탭 (TAB) |
%티 | % M : 그것은 %의 H에 상당 % S. |
%에서 | 주 월요일 (1-7) 디지털 표현, 1. |
% U | 올해의 처음 몇 주 (첫 주를 시작으로 첫 번째 일요일), 00-53 |
%의 V | 올해의 처음 몇 주 (첫 번째 월요일 시작 첫 주 등), 01-53. |
%의 w | 디지털 표현에 주 (0-6), 0은 일요일을 나타냅니다. |
% W | 처음 몇 주간의 진수 표현 년 (시작의 첫 주와 같은 첫 번째 월요일), 00-53. |
%엑스 | 현지 날짜 표현 |
%엑스 | 현지 시간 |
%와 | 올해 모드 (100). |
% Y | 전체 년의 진수 표현입니다. |
의 % | 포맷 + HHMM 표현 시간대 (예를 들어, 형식 요구 RFC 1036 RFC 822 헤더 생성 시간) |
%에서 | 시간대 이름 또는 약어, 시간 영역은 출력을 보류하지 않는 경우. |
AWK 사용자 정의 기능
문법
function function_name(param1,param2,...)
{
body
}
예
[worker@c2-a02-126-10-4 hanchao]$ cat func.awk
# sum
function sum(a,b)
{
return a + b;
}
# avg
function avg(a,b)
{
return (a + b) / 2;
}
# main
function main(a,b)
{
print "sum=",sum(a,b);
print "avg=",avg(a,b);
}
BEGIN{
main(10,20)
}
[worker@c2-a02-126-10-4 hanchao]$ awk -f func.awk
sum= 30
avg= 15