關於linux-awk讀書筆記

1分鐘懂awk-技不在深,夠用就行shell

1.什麼是AWK
(1)Aho、Weinberger、Kernighan三位發明者名字首字母;
(2)一個行文本處理工具;bash

2.AWK基本原理
2.1原理:逐行處理文件中的數據函數

2.2語法工具

 

awk 'pattern + {action}'spa

說明:
(1)單引號''是爲了和shell命令區分開;
(2)大括號{}表示一個命令分組;
(3)pattern是一個過濾器,表示命中pattern的行才進行action處理;
(4)action是處理動做;
(5)使用#做爲註釋;
例子:顯示hello.txt中的第3行至第5行ci

 

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

2.3pattern說明
pattern參數能夠是egrep正則中的一個,正則使用/pattern/
例子:顯示hello.txt中,正則匹配hello的行it

 

cat hello.txt | awk '/hello/'io

說明:
(1)pattern和action能夠只有其一,但不能二者都沒有;
(2)默認的action是print;
例子:顯示hello.txt中,長度大於100的行號table

 

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

3.內置變量
FS 分隔符,默認是空格
NR 當前行數,從1開始
NF 當前記錄字段個數
$0 當前記錄
$1~$n 當前記錄第n個字段
例子:顯示hello.txt中的第3行至第5行的第一列與最後一列

 

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

4.內置函數
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運算符
相似於c,支持+、-、*、/、%、++、–、+=、-=等諸多操做;

5.2判斷符
相似於c,支持==、!=、>、=>、~(匹配於)等諸多判斷操做;

6.控制流程
6.1.BEGIN和END
BEGIN和END本質是一個pattern。
BEGIN用於awk程序開始開始前,作一些初始化的工做;
END用於awk程序結束前,作一些收尾的工做。
例子:統計字符個數

 

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,會執行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.結束語

對不起,樓主欺騙了你,認真看完本文或許不止1分鐘。不過,若是你真的認真閱讀並超過了1分鐘,相信你會有收穫。

相關文章
相關標籤/搜索