一分鐘學(xué)awk夠用(產(chǎn)品經(jīng)理都懂了)

2018-09-06 18:00 更新

1分鐘懂a(chǎn)wk-技不在深,夠用就行


1.什么是AWK

(1)Aho、Weinberger、Kernighan三位發(fā)明者名字首字母;

(2)一個行文本處理工具;


2.AWK基本原理

2.1原理逐行處理文件中的數(shù)據(jù)


2.2語法

awk 'pattern + {action}'

說明:

(1)單引號''是為了和shell命令區(qū)分開;

(2)大括號{}表示一個命令分組;

(3)pattern是一個過濾器,表示命中pattern的行才進(jìn)行action處理;

(4)action是處理動作;

(5)使用#作為注釋;

例子:顯示hello.txt中的第3行至第5行

cat hello.txt | awk 'NR==3, NR==5{print;}'


2.3pattern說明

pattern參數(shù)可以是egrep正則中的一個,正則使用/pattern/

例子:顯示hello.txt中,正則匹配hello的行

cat hello.txt | awk '/hello/'

說明:

(1)pattern和action可以只有其一,但不能兩者都沒有;

(2)默認(rèn)的action是print;

例子:顯示hello.txt中,長度大于100的行號

cat hello.txt | awk 'length($0)>80{print NR}'


3.內(nèi)置變量

FS 分隔符,默認(rèn)是空格

NR 當(dāng)前行數(shù),從1開始

NF 當(dāng)前記錄字段個數(shù)
$0 當(dāng)前記錄
$1~$n 當(dāng)前記錄第n個字段
例子:顯示hello.txt中的第3行至第5行的第一列與最后一列

cat hello.txt | awk 'NR==3, NR==5{print $1,$NF}'


4.內(nèi)置函數(shù)

gsub(r,s):在$0中用s代替r

index(s,t):返回s中t的第一個位置

length(s):s的長度

match(s,r):s是否匹配r

split(s,a,fs):在fs上將s分成序列a

substr(s,p):返回s從p開始的子串


5.操作符

5.1運(yùn)算符

類似于c,支持+、-、*、/、%、++、–、+=、-=等諸多操作;

5.2判斷符

類似于c,支持==、!=、>、=>、~(匹配于)等諸多判斷操作;


6.控制流程

6.1.BEGIN和END

BEGIN和END本質(zhì)是一個pattern。

BEGIN用于awk程序開始開始前,做一些初始化的工作;

END用于awk程序結(jié)束前,做一些收尾的工作。

例子:統(tǒng)計字符個數(shù)

awk '

BEGIN

{

count=0;

}

{

count+=length($0);

}

END

{

print count;

}'


6.2流程控制語句

(1)if(condition){}else{}

(2)while{}

(3)do{}while(condition);

(4)for(init;condition;step){}

(5)break/continue:如果有END,會執(zhí)行END中的收尾工作

個流程控制語句用法幾乎與c相同。


7.awk與shell的交互

(1)awk中使用shell中定義的變量:使用單引號即可;

#!/bin/bash

STR="hello"

echo | awk '{

print "'${STR}'";

}'

(2)awk中使用shell命令:使用雙引號,或者system命令;

#!/bin/bash

echo hello | awk '{

print $0 | "cat"

}'

或者

#!/bin/bash

echo | awk '{

system("date > date.txt")

}'

(3)awk中的變量傳出至shell:沒有什么好方法,老老實實用文件吧;

(4)getline:awk里,從文件中讀取變量到awk中

#!/bin/bash

echo | awk '{

while(getline < "date.txt")

{

print $0;

}

}'


8.結(jié)束語

對不起,樓主欺騙了你,認(rèn)真看完本文或許不止1分鐘。不過,如果你真的認(rèn)真閱讀并超過了1分鐘,相信你會有收獲。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號