AWK 명령과 리눅스의 사용

A, AWK 프로필

  AWK는 텍스트 파일을 처리하는 언어, 텍스트 분석은 강력한 도구입니다

두 매개 변수 및 구문을 awk가

  AWK [파라미터] {인쇄 인쇄} 파일 처리

  -F는 : 지정된 파일이 구분 기호로 읽은 것을 나타내는 구분 기호 정의

  -v : 변수 모드, 당신은 변수와 통화 (통화 $ 기호를 추가 할 필요가 없습니다)에 할당 할 수 있습니다

AWK의 셋째, 기본적인 사용법

  사용자 이름을 출력하고 사용자 명령 인터프리터에서 사용하는 passwd에 다음을 사용하여

# 쪽이든
 된 awk -F ' : '  ' {. 인쇄 $ 1 ""$ (7).} ' 의 / etc / passwd에 
# 출력 
루트
/ 빈 / bash는 경우 / sbin / nologin으로 데몬 경우 / sbin / nologin으로 # 두 번째 방법 은 awk -F ' : ' ' { $. 1 인쇄 ""(NF의) $} ' 의 / etc / passwd에 # 출력
루트
/ 빈 / bash는 경우 / sbin / nologin으로 데몬 경우 / sbin / nologin으로

NF되는 각 라인 분리 후 컬럼 총계

NR은 행의 수를 나타냅니다

AWK -F은 ':'NR == 5 '은 / etc / {$ 1 ""$ (NF) 인쇄} passwd를 # 요약 다섯째 행
LP / sbin에 /을 nologin으로

  용도 II : 복수의 세퍼레이터를 사용하여 분리

# 자명 다섯째 행 및 최종 출력 지령 통역자
 된 awk -F ' [/] '  ' . NR == $ 1.5 {인쇄 ""(NF의) $} ' 은 / etc / Passwd 파일
# 출력
LP nologin를 참고 복수 구분자 사이 사용 [(명령문 괄호) AWK 기본 세퍼레이터는 공간

  사용 세 : AWK 변수 사용

AWK -VA = 2 -Vb = 3.  ' NR 1 == {A + B} 출력한다. ' 등 / / Passwd 파일 
# 출력 
5 주 : AWK 도구 파일에 의존해야

 

넷째, 사용 내장 된 awk 변수와 연산자

운영자 기술
|| 논리 또는
&& 로직 및
~ ~! 그리고 정규 표현식과 일치하지 않습니다 정규 표현식과 일치
<<=>> =! = == 관계 연산자
공백 연결
+ - * / % 모듈로 산술
++ - 증가 또는 감소
$ 필드 참조
배열 구성원

 

다음으로, yanshi.txt의 텍스트 콘텐츠를 사용

3 테스트의 nginx mysql을

4 MySQL의 고정 표시기 평방 AWK
이 테스트의
레디 스는 쉘 (22) 바람둥이, 파이썬, 자바

  의 사용 : 행의 제 1 실시 예를 필터링은 3보다 큰

AWK  ' $ (1)> 3 ' yanshi.txt 
#输出
4 MySQL의 고정 표시기 평방 AWK ' 테스트 사 (22)가 레디 스는 쉘 바람둥이, 파이썬, 자바

  라인 필터 (3)는 첫 번째 열의 두 번째 열보다 큰 "MySQL의"같다 : 두 사용

AWK  ' $ (1)> 3 && $ 2 == "MySQL은" ' yanshi.txt 
#输出
4 MySQL의 고정 표시기 평방 AWK

  

\ $ N 현재 기록 n 번째 필드
FS 필드 구분
NF 필드 당 행 번호
NO 행 번호가 읽은 레코드 수,
OFS 출력 레코드 구분 기호를 지정합니다
파일 이름 현재 파일 이름
IGNORECASE 참이면 경우 매칭을 행하는 무시
대략 환경 변수 연관 배열
ERRNO 마지막으로, 오류 시스템에 대한 설명
ORS 출력 레코드 분리 (기본 개행이다).

  를 사용하여 별도의 출력 번호로 지정

AWK는  ' {$ 1, $ 2, $ 3 인쇄} ' OFS = " # " yanshi.txt의 
#输出
3 # 시험 # nginx를
 4 고정 표시기 # MySQL의 # ' 의 # A # 테스트를 
22 # 바람둥이 # 레디 스 
#######을 ##################### 
AWK  ' {$ 1, $ 2, $ 3를 인쇄} ' ORS = " # " yanshi.txt의 
#输出结果
3 시험의 nginx # 4 MySQL의 고정 표시기 #이 ' 레디 스 # 바람둥이 사 시험 # 22

   다섯, 정규 표현식에서 awk가

메타 문자 설명
^ 헤더 일치하는 문자열에서
$ 꼬리 문자열 일치에서
. 모든 문자와 일치
* 제로 또는 앞의 문자 이상을 일치
+ 하나 앞의 문자 이상을 일치
? 0 또는 1 주인공을 일치
[알파벳] 사용자 정의 문자 세트 (ABC) 문자를 일치
[^ ABC] 어떤 문자의 문자 세트 (ABC)를 지정하지 일치
[AZ] 하나 개의 문자 Z 사이의 일치
A | B A 또는 B와 일치
(AB) + 匹配一个或多个ab的组合
\* 配置星号本身
& 用在替代串中,代表查找串中匹配到的内容
{m} 指点匹配前面的字符m次
{m,} 指定匹配前面的字符至少m次
{m,n} 指定匹配前面的字符m~n次
~,!~ 指定标量与正则表达式匹配或不匹配

  

 

  可以查看 awk正则运算表达式详解

 

  六、awk中的函数应用

  应用一:求出已使用的内存的百分比

free | awk '/Mem/ {print int($3/$2*100)}' 
13

  应用二:生成一个随机数

echo "" | awk '{srand(); print int(rand()*10)}'
5
 echo "" | awk '{srand(); print int(rand()*10)}'
6
#srand()将rand的函数种子,rand()返回任意数n,其中0<=n<1

  应用三:时间函数

#systime()函数返回当前时间戳
echo
"" | awk '{print systime()}' 1581650690 [root@fengling ~]# date -d@1581650690 Fri Feb 14 11:24:50 CST 2020 [root@fengling ~]# date Fri Feb 14 11:25:36 CST 2020
#strftime()函数格式化时间
echo "" | awk '{print strftime("%Y-%m-%d %H:%M:%s")}'
2020-02-14 11:28:1581650907
#mktime()将指定时间转换为时间戳
echo "" | awk '{print mktime(2018" "9" "10 " "10" "5" "20)}'
1536545120
date -d@1536545120
Mon Sep 10 10:05:20 CST 2018

 

  七、awk的初始代码块与结束代码块

#要使用的文件log.txt

2019/03/12 21:23:25 [info] client: 118.124.94.110 server: www.minerbabe.com, request: "GET/keys/ssh/pb?device_id=4e8227b63&need_update=0 HTTP/1.1", host: "www.minerbabe.com"
2019/03/12 21:23:25 [error] client: 118.124.94.110 server: www.minerbabe.com, request: "GET/keys/ssh/pb?device_id=4e8227b63&need_update=0 HTTP/1.1", host: "www.minerbabe.com"
2019/03/12 21:23:25 [error] client: 118.124.94.110 server: www.minerbabe.com, request: "GET/keys/ssh/pb?device_id=4e8227b63&need_update=0 HTTP/1.1", host: "www.minerbabe.com"
2019/03/12 21:23:25 [info] client: 118.124.94.110 server: www.minerbabe.com, request: "GET/keys/ssh/pb?device_id=4e8227b63&need_update=0 HTTP/1.1", host: "www.minerbabe.com"
2019/03/12 21:23:25 [error] client: 118.124.94.110 server: www.minerbabe.com, request: "GET/keys/ssh/pb?device_id=4e8227b63&need_update=0 HTTP/1.1", host: "www.minerbabe.com"
2019/03/12 21:23:25 [error] client: 118.124.94.173 server: www.minerbabe.com, request: "GET/keys/ssh/pb?device_id=2d20b53c5&need_update=0 HTTP/1.1", host: "www.minerbabe.com"
2019/03/12 21:23:25 [error] client: 118.124.94.173 server: www.minerbabe.com, request: "GET/keys/ssh/pb?device_id=2d20b53c5&need_update=0 HTTP/1.1", host: "www.minerbabe.com"
2019/03/12 21:23:25 [error] client: 118.124.94.27 server: www.minerbabe.com, request: "GET/keys/ssh/pb?device_id=fa7c727f0&need_update=0 HTTP/1.1", host: "www.minerbabe.com"
2019/03/12 21:23:25 [error] client: 118.124.94.75 server: www.minerbabe.com, request: "GET/keys/ssh/pb?device_id=e7c5fbd34&need_update=0 HTTP/1.1", host: "www.minerbabe.com"
2019/03/12 21:23:25 [info] client: 118.124.94.29 server: www.minerbabe.com, request: "GET/keys/ssh/pb?device_id=d4b3050af&need_update=0 HTTP/1.1", host: "www.minerbabe.com"

  

#开头输出yi结尾输出三
echo
"" | awk 'BEGIN {print"yi"} {print "er"} END{print "san"}' yi er san

  实例一:打印出IP地址以及错误等级

    要求格式:IP地址    错误等级  

awk 'BEGIN{print "ip地址""        ""错误等级"} {print $5" "$3}' log.txt 
ip地址        错误等级
118.124.94.110 [info]
118.124.94.110 [error]
118.124.94.110 [error]
118.124.94.110 [info]
118.124.94.110 [error]
118.124.94.173 [error]
118.124.94.173 [error]
118.124.94.27 [error]
118.124.94.75 [error]
118.124.94.29 [info]

 

  八、awk中的控制语句

  实例一:if--else语句

#输出错误等级为error的IP地址
awk '{if($3=="[error]") print $5}' log.txt 
118.124.94.110
118.124.94.110
118.124.94.110
118.124.94.173
118.124.94.173
118.124.94.27
118.124.94.75
#输出错误等级为error的IP地址,错误等级不为error输出错误等级

awk '{if($3=="[error]")print $5; else print $3}' log.txt
[info]
118.124.94.110
118.124.94.110
[info]
118.124.94.110
118.124.94.173
118.124.94.173
118.124.94.27
118.124.94.75
[info]

  实例二:while语句

echo "" | awk -v i=1 '{while(i<10){print(i); i = i + 1}}'
1
2
3
4
5
6
7
8
9

  实例三:for语句

echo "" | awk '{for(i=1;i<=3;i++) print i}'
1
2
3

  

  九、awk中的数组

  

awk '{line[NR] = $5} END{for(i=NR;i>0;i--) print line[i]}' log.txt 
118.124.94.29
118.124.94.75
118.124.94.27
118.124.94.173
118.124.94.173
118.124.94.110
118.124.94.110
118.124.94.110
118.124.94.110
118.124.94.110

#数组名[下标]  = 值

 

  

  

 

추천

출처www.cnblogs.com/wbxliux/p/12300614.html