Linux三劍客之awk詳解
第一篇 awk簡介與表示式例項
-
一種名字怪異的語言
-
模式掃描和處理,處理資料和生成報告。
awk不僅僅是linux系統中的一個命令,而且是一種程式語言;它可以用來處理資料和生成報告(excel);處理的資料可以是一個或多個檔案;可以是直接來自標準輸入,也可以通過管道獲取標準輸入;awk可以在命令列上直接編輯命令進行操作,也可以編寫成awk程式來進行更為複雜的運用。
sed處理stream editor文字流,水流。
一、awk環境簡介
本文涉及的awk為gawk,即GNU版本的awk。
[root@creditease awk]# cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) [root@creditease awk]# uname -r 3.10.0-862.el7.x86_64 [root@creditease awk]# ll `which awk` lrwxrwxrwx. 1 root root 4 Nov 7 14:47 /usr/bin/awk -> gawk [root@creditease awk]# awk --version GNU Awk 4.0.2
二、awk的格式
awk指令是由模式、動作,或者模式和動作的組合組成。
-
模式即pattern,可以類似理解成sed的模式匹配,可以由表示式組成,也可以是兩個正斜槓之間的正規表示式。比如NR==1,這就是模式,可以把它理解為一個條件。
-
動作即action,是由在大括號裡面的一條或多條語句組成,語句之間使用分號隔開。如下awk使用格式。
三、記錄和域
名稱 | 含義 |
---|---|
record | 記錄,行 |
filed | 域,區域,欄位,列 |
1)NF(number of field)表示一行中的區域(列)數量,$NF取最後一個區域。
2)$符號表示取某個列(區域),$1,$2,$NF
3)NR (number of record) 行號,awk對每一行的記錄號都有一個內建變數NR來儲存,每處理完一條記錄NR的值就會自動+1
4)FS(-F)field separator 列分隔符,以什麼把行分隔成多列
3.1 指定分隔符
[root@creditease awk]# awk -F "#" '{print $NF}' awk.txt GKL$123 GKL$213 GKL$321 [root@creditease awk]# awk -F '[#$]' '{print $NF}' awk.txt 123 213 321
3.2 條件動作基本的條件和動作
[root@creditease awk]# cat awk.txt ABC#DEF#GHI#GKL$123 BAC#DEF#GHI#GKL$213 CBA#DEF#GHI#GKL$321 [root@creditease awk]# awk -F "#" 'NR==1{print $1}' awk.txt ABC
3.3 只有條件
[root@creditease awk]# awk -F "#" 'NR==1' awk.txt ABC#DEF#GHI#GKL$123
預設會有動作{print $0}
3.4 只有動作
[root@creditease awk]# awk -F "#" '{print $1}' awk.txt ABC BAC CAB
預設處理所有行
3.5 多個模式和動作
[root@creditease awk]# awk -F "#" 'NR==1{print $NF}NR==3{print $NF}' awk.txt GKL$123 GKL$321
3.6 對$0的認識
awk中$0表示整行
[root@creditease awk]# awk '{print $0}' awk_space.txt ABC DEF GHI GKL$123 BAC DEF GHI GKL$213 CBA DEF GHI GKL$321
3.7 FNR
FNR與NR類似,不過多檔案記錄不遞增,每個檔案都從1開始(後邊處理多檔案會講到)
[root@creditease awk]# awk '{print NR}' awk.txt awk_space.txt 1 2 3 4 5 6 [root@creditease awk]# awk '{print FNR}' awk.txt awk_space.txt 1 2 3 1 2 3
四、正規表示式與操作符
awk同sed一樣也可以通過模式匹配來對輸入的文字進行匹配處理。 awk也支援大量的正規表示式模式,大部分與sed支援的元字元類似,而且正規表示式是玩轉三劍客的必備工具。
awk支援的正規表示式元字元
awk預設不支援的元字元,和需要新增引數才能支援的元字元
元字元 | 功能 | 示例 | 解釋 |
---|---|---|---|
x{m} | x重複m次 | /cool{5}/ | 需要注意一點的是,cool加括號或不加括號的區別,x可以使字串也可以只是一個字元,所以/cool{5}/表示匹配coo再加上5個l,即coolllll。/(cool){2,}/表示匹配coolcool,coolcoolcool等。 |
x{m,} | x重複至少m次 | /(cool){2,}/ | 同上 |
x{m,n} | x重複至少m次,但不超過n次,需要指定引數:--posix或者--re-interval。沒有該引數不能使用這種模式 | /(cool){5,6}/ | 同上 |
正規表示式的運用,預設是在行內查詢匹配的字串,若有匹配則執行action操作,但是有時候僅需要固定的列表匹配指定的正規表示式。
比如:
我想取/etc/passwd檔案中第五列($5)這一列查詢匹配mail字串的行,這樣就需要用另外兩個匹配操作符。並且awk裡面只有這兩個操作符來匹配正規表示式的。
正則匹配操作符 | |
---|---|
~ | 用於對記錄或區域的表示式進行匹配。 |
!~ | 用於表達與~相反的意思。 |
4.1 正則例項
1)顯示awk.txt中GHI列
[root@creditease awk]# cat awk.txt ABC#DEF#GHI#GKL$123 BAC#DEF#GHI#GKL$213 CBA#DEF#GHI#GKL$321 [root@creditease awk]# awk -F "#" '{print $3}' awk.txt GHI GHI GHI [root@creditease awk]# awk -F "#" '{print $(NF-1)}' awk.txt GHI GHI GHI
2)顯示包含321的行
[root@creditease awk]# awk '/321/{print $0}' awk.txt CBA#DEF#GHI#GKL$321
3)以#為分隔符,顯示第一列以B開頭或最後一列以1結尾的行
[root@creditease awk]# awk -F "#" '$1~/^B/{print $0}$NF~/1$/{print $0}' awk.txt BAC#DEF#GHI#GKL$213 CBA#DEF#GHI#GKL$321
4)以#為分隔符,顯示第一列以B或C開頭的行
[root@creditease awk]# awk -F "#" '$1~/^B|^C/{print $0}' awk.txt BAC#DEF#GHI#GKL$213 CBA#DEF#GHI#GKL$321 [root@creditease awk]# awk -F "#" '$1~/^[BC]/{print $0}' awk.txt BAC#DEF#GHI#GKL$213 CBA#DEF#GHI#GKL$321 [root@creditease awk]# awk -F "#" '$1~/^(B|C)/{print $0}' awk.txt BAC#DEF#GHI#GKL$213 CBA#DEF#GHI#GKL$321 [root@creditease awk]# awk -F "#" '$1!~/^A/{print $0}' awk.txt BAC#DEF#GHI#GKL$213 CBA#DEF#GHI#GKL$321
五、比較表示式
awk是一種程式語言,能夠進行更為複雜的判斷,當條件為真時,awk就執行相關的action,主要是在針對某一區域做出相關的判斷,比如列印成績在80分以上的,這樣就必須對這一個區域作比較判斷.
下表列出了awk可以使用的關係運算子,可以用來比較數字字串,還有正規表示式,當表示式為真的時候,表示式結果為1,否則為0,只有表示式為真,awk才執行相關的action。
awk支援的關係運算子
運算子 | 含義 | 示例 |
---|---|---|
< | 小於 | x>y |
<= | 小於或等於。 | x<=y |
== | 等於 | x==y |
!= | 不等於 | x!=y |
>= | 大於或等於 | x>=y |
> | 大於 | x<y |
5.1 比較表示式例項
顯示awk.txt的第2 ,3 行
NR //,//
[root@creditease awk]# awk 'NR==2{print $0}NR==3{print $0}' awk.txt BAC#DEF#GHI#GKL$213 CBA#DEF#GHI#GKL$321 [root@creditease awk]# awk 'NR>=1{print $0}' awk.txt ABC#DEF#GHI#GKL$123 BAC#DEF#GHI#GKL$213 CBA#DEF#GHI#GKL$321 [root@creditease awk]# awk '/BAC/,/CBA/{print $0}' awk.txt BAC#DEF#GHI#GKL$213 CBA#DEF#GHI#GKL$321
第二篇 awk模組、變數與執行
完整awk結構圖如下:
一、BEGIN模組
BEGIN模組在awk讀取檔案之前就執行,BEGIN模式常常被用來修改內建變數ORS,RS,FS,OFS等的值。可以不接任何輸入檔案
二、awk內建變數(預定義變數)
變數名 | 屬性 |
---|---|
$0 | 當前記錄,一整行 |
$1,$2,$3....$a | 當前記錄的第n個區域,區域間由FS分隔。 |
FS | 輸入區域分隔符,預設是空格。field separator |
NF | 當前記錄中的區域個數,就是有多少列。number of field |
NR | 已經讀出的記錄數,就是行號,從1開始。number of record |
RS | 輸入的記錄分隔符預設為換行符。record separator |
OFS | 輸出區域分隔符,預設也是空格。output record separator |
FNR | 當前檔案的讀入記錄號,每個檔案重新計算。 |
FILENAME | 當前正在處理的檔案的檔名 |
特別提示:FS RS支援正規表示式
2.1 第一個作用: 定義內建變數
[root@creditease awk]# awk 'BEGIN{RS="#"}{print $0}' awk.txt ABC DEF GHI GKL$123 BAC DEF GHI GKL$213 CBA DEF GHI GKL$321
2.2 第二個作用:列印標識
[root@creditease awk]# awk 'BEGIN{print "=======start======"}{print $0}' awk.txt =======start====== ABC#DEF#GHI#GKL$123 BAC#DEF#GHI#GKL$213 CBA#DEF#GHI#GKL$321
2.3 awk實現計算功能
[root@creditease files]# awk 'BEGIN{a=8;b=90;print a+b,a-c,a/b,a%b}' 98 8 0.0888889 8
三、END模組
END在awk讀取完所有的檔案的時候,再執行END模組,一般用來輸出一個結果(累加,陣列結果)。也可以是和BEGIN模組類似的結尾標識資訊。
3.1 第一個作用:列印標識
[root@creditease awk]# awk 'BEGIN{print "=======start======"}{print $0}END{print "=======end======"}' awk.txt =======start====== ABC#DEF#GHI#GKL$123 BAC#DEF#GHI#GKL$213 CBA#DEF#GHI#GKL$321 =======end======
3.2 第二個作用:累加
1)統計空行(/etc/services檔案)
grep sed awk
[root@creditease awk]# grep "^$" /etc/services |wc -l 17 [root@creditease awk]# sed -n '/^$/p' /etc/services |wc -l 17 [root@creditease awk]# awk '/^$/' /etc/services |wc -l 17 [root@creditease awk]# awk '/^$/{i=i+1}END{print i}' /etc/services 17
2)算術題
1+2+3......+100=5050,怎麼用awk表示?
[root@creditease awk]# seq 100|awk '{i=i+$0}END{print i}' 5050
四、awk詳解小結
1、BEGIN和END模組只能有一個,BEGIN{}BEGIN{}或者END{}END{}都是錯誤的。
2、找誰幹啥模組,可以是多個。
五、awk執行過程總結
awk執行過程:
1、命令列的賦值(-F或-V)
2、執行BEGIN模式裡面的內容
3、開始讀取檔案
4、判斷條件(模式)是否成立
- 成立則執行對應動作裡面的內容
- 讀取下一行,迴圈判斷
- 直到讀取到最後一個檔案的結尾
5、最後執行END模式裡面的內容
第三篇:awk陣列與語法
一、awk陣列
1.1 陣列結構
people[police]=110
people[doctor]=120
[root@creditease awk]# awk 'BEGIN{word[0]="credit";word[1]="easy";print word[0],word[1]}' credit easy [root@creditease awk]# awk 'BEGIN{word[0]="credit";word[1]="easy";for(i in word)print word[i]}' credit easy
1.2 陣列分類
索 引陣列:以數字為下標
關聯陣列:以字串為下標
1.3 awk關聯陣列
現有如下文字,格式如下:即左邊是隨機字母,右邊是隨機數字, 即將相同的字母后面的數字加在一起,按字母的順序輸出
a 1 b 3 c 2 d 7 b 5 a 3 g 2 f 6
以$1為下標,建立陣列a[$1]=a[$1]+$2(a[$1]+=$2)然後配合END和for迴圈輸出結果:
[root@creditease awk]# awk '{a[$1]=a[$1]+$2}END{for(i in a)print i,a[i]}' jia.txt a 4 b 8 c 2 d 7 f 6 g 2 注意:for(i in a) 迴圈的順序不是按照文字內容的順序來處理的,排序可以在命令後加sort排序
1.4 awk索引陣列
以數字為下標的陣列 seq生成1-10的數字,要求只顯示計數行
[root@creditease awk]# seq 10|awk '{a[NR]=$0}END{for(i=1;i<=NR;i+=2){print a[i]}}' 1 3 5 7 9
seq生成1-10的數字,要求不顯示檔案的後3行
[root@creditease awk]# seq 10|awk '{a[NR]=$0}END{for(i=1;i<=NR-3;i++){print a[i]}}' 1 2 3 4 5 6 7 解析:改變i的範圍即可,多用於不顯示檔案的後幾行
1.5 awk陣列實戰去重
a++ 和 ++a
[root@creditease awk]# awk 'BEGIN{print a++}' [root@creditease awk]# awk 'BEGIN{print ++a}' 1 [root@creditease awk]# awk 'BEGIN{a=1;b=a++;print a,b}' 2 1 [root@creditease awk]# awk 'BEGIN{a=1;b=++a;print a,b}' 2 2 注: 都是 b = a+1 b=a++ 先把 a 的值賦予b,然後 a + 1 b=++a 先執行a+1,然後把a的值賦予b
對一下文字進行去重處理 針對第二列去重
[root@creditease awk]# cat qc.txt 2018/10/20 xiaoli 13373305025 2018/10/25 xiaowang 17712215986 2018/11/01 xiaoliu 18615517895 2018/11/12 xiaoli 13373305025 2018/11/19 xiaozhao 15512013263 2018/11/26 xiaoliu 18615517895 2018/12/01 xiaoma 16965564525 2018/12/09 xiaowang 17712215986 2018/11/24 xiaozhao 15512013263
解法一: [root@creditease awk]# awk '!a[$2]++' qc.txt 2018/10/20 xiaoli 13373305025 2018/10/25 xiaowang 17712215986 2018/11/01 xiaoliu 18615517895 2018/11/19 xiaozhao 15512013263 2018/12/01 xiaoma 16965564525 解析: !a[$3]++是模式(條件),命令也可寫成awk '! a[$3]=a[$3]+1{print $0}' qc.txt a[$3]++ ,“++”在後,先取值後加一 !a[$3]=a[$3]+1:是先取a[$3]的值,比較“!a[$3]”是否符合條件(條件非0),後加1 注意:此方法去重後的結果顯示的是文字開頭開始的所有不重複的行 解法二: [root@creditease awk]# awk '++a[$2]==1' qc.txt 2018/10/20 xiaoli 13373305025 2018/10/25 xiaowang 17712215986 2018/11/01 xiaoliu 18615517895 2018/11/19 xiaozhao 15512013263 2018/12/01 xiaoma 16965564525 解析: ++a[$3]==1是模式(條件),也可寫成a[$3]=a[$3]+1==1即只有當條件(a[$3]+1的結果)為1的時候才列印出內容 ++a[$3] ,“++”在前,先加一後取值 ++a[$3]==1:是先加1,後取a[$3]的值,比較“++a[$3]”是否符合條件(值為1) 注意:此方法去重後的結果顯示的是文字開頭開始的所有不重複的行 解法三: [root@creditease awk]# awk '{a[$2]=$0}END{for(i in a){print a[i]}}' qc.txt 2018/11/12 xiaoli 13373305025 2018/11/26 xiaoliu 18615517895 2018/12/01 xiaoma 16965564525 2018/12/09 xiaowang 17712215986 2018/11/24 xiaozhao 15512013263 解析: 注意此方法去重後的結果顯示的是文字結尾開始的所有不重複的行
1.6 awk處理多個檔案(陣列、NR、FNR)
使用awk取file.txt的第一列和file1.txt的第二列然後重定向到一個新檔案new.txt中
[root@creditease awk]# cat file1.txt a b c d e f g h i j [root@creditease awk]# cat file2.txt 1 2 3 4 5 6 7 8 9 10 [root@creditease awk]# awk 'NR==FNR{a[FNR]=$1}NR!=FNR{print a[FNR],$2}' file1.txt file2.txt a 2 c 4 e 6 g 8 i 10 解析:NR==FNR處理的是第一個檔案,NR!=FNR處理的是第二個檔案. 注意:當兩個檔案NR(行數)不同的時候,需要把行數多的放前邊. 解決方法:把行數多的檔案放前邊,行數少的檔案放後邊. 把輸出的結果放入一個新檔案new.txt中: [root@creditease awk]# awk 'NR==FNR{a[FNR]=$1}NR!=FNR{print a[FNR],$2>"new.txt"}' file1.txt file2.txt [root@creditease awk]# cat new.txt a 2 c 4 e 6 g 8 i 10
1.7 awk分析日誌檔案,統計訪問網站的個數
[root@creditease awk]# cat url.txt http://www.baidu.com http://mp4.video.cn http://www.qq.com http://www.listeneasy.com http://mp3.music.com http://www.qq.com http://www.qq.com http://www.listeneasy.com http://www.listeneasy.com http://mp4.video.cn http://mp3.music.com http://www.baidu.com http://www.baidu.com http://www.baidu.com http://www.baidu.com [root@creditease awk]# awk -F "[/]+" '{h[$2]++}END{for(i in h) print i,h[i]}' url.txt www.qq.com 3 www.baidu.com 5 mp4.video.cn 2 mp3.music.com 2 www.crediteasy.com 3
二、awk簡單語法
2.1 函式sub gsub
替換功能
格式:sub(r, s ,目標) gsub(r, s ,目標)
[root@creditease awk]# cat sub.txt ABC DEF AHI GKL$123 BAC DEF AHI GKL$213 CBA DEF GHI GKL$321 [root@creditease awk]# awk '{sub(/A/,"a");print $0}' sub.txt aBC DEF AHI GKL$123 BaC DEF AHI GKL$213 CBa DEF GHI GKL$321 [root@creditease awk]# awk '{gsub(/A/,"a");print $0}' sub.txt aBC DEF aHI GKL$123 BaC DEF aHI GKL$213 CBa DEF GHI GKL$321 注:sub只會替換行內匹配的第一次內容;相當於sed ‘s###’ gsub 會替換行內匹配的所有內容;相當於sed ‘s###g’ [root@creditease awk]# awk '{sub(/A/,"a",$1);print $0}' sub.txt aBC DEF AHI GKL$123 BaC DEF AHI GKL$213 CBa DEF GHI GKL$321
練習:
0001|20081223efskjfdj|EREADFASDLKJCV 0002|20081208djfksdaa|JDKFJALSDJFsddf 0003|20081208efskjfdj|EREADFASDLKJCV 0004|20081211djfksdaa1234|JDKFJALSDJFsddf 以'|'為分隔, 現要將第二個域字母前的數字去掉,其他地方都不變, 輸出為: 0001|efskjfdj|EREADFASDLKJCV 0002|djfksdaa|JDKFJALSDJFsddf 0003|efskjfdj|EREADFASDLKJCV 0004|djfksdaa1234|JDKFJALSDJFsddf 方法: awk -F '|' 'BEGIN{OFS="|"}{sub(/[0-9]+/,"",$2);print $0}' sub_hm.txt awk -F '|' -v OFS="|" '{sub(/[0-9]+/,"",$2);print $0}' sub_hm.txt
2.2 if和slse的用法
內容:
AA
BC
AA
CB
CC
AA
結果:
AA YES
BC NO YES
AA YES
CB NO YES
CC NO YES
AA YES
1) [root@creditease awk]# awk '{if($0~/AA/){print $0" YES"}else{print $0" NO YES"}}' ifelse.txt AA YES BC NO YES AA YES CB NO YES CC NO YES AA YES 解析:使用if和else,if $0匹配到AA,則列印$0 "YES",else反之列印$0 " NO YES"。 2)[root@creditease awk]# awk '$0~/AA/{print $0" YES"}$0!~/AA/{print $0" NO YES"}' ifelse.txt AA YES BC NO YES AA YES CB NO YES CC NO YES AA YES 解析:使用正則匹配,當$0匹配AA時,列印出YES,反之,列印出“NO YES”
2.3 next用法
如上題,用next來實現
next :跳過它後邊的所有程式碼
[root@creditease awk]# awk '$0~/AA/{print $0" YES";next}{print $0" NO YES"}' ifelse.txt AA YES BC NO YES AA YES CB NO YES CC NO YES AA YES 解析: {print $0" NO YES"}:此動作是預設執行的,當前邊的$0~/AA/匹配,就會執行{print $0" YES";next} 因為action中有next,所以會跳過後邊的action。 如果符合$0~/AA/則列印YES ,遇到next後,後邊的動作不執行;如果不符合$0~/AA/,會執行next後邊的動作; next前邊的(模式匹配),後邊的就不執行,前邊的不執行(模式不匹配),後邊的就執行。
2.4 printf不換行輸出以及next用法
printf :列印後不換行
如下文字,如果 Description:之後為空,將其後一行內容併入此行。
Packages: Hello-1 Owner: me me me me Other: who care? Description: Hello world! Other2: don't care 想要結果: Packages: Hello-1 Owner: me me me me Other: who care? Description: Hello world! Origial-Owner: me me me me Other2: don't care 1)[root@creditease awk]# awk '/^Desc.*:$/{printf $0}!/Desc.*:$/{print $0}' printf.txt Packages: Hello-1 Owner: me me me me Other: who care? Description:Hello world! Other2: don't care 解析:使用正則匹配,匹配到'/^Desc.*:$/,就使用printf列印(不換行),不匹配的列印出整行。 2)使用if和else實現 [root@creditease awk]# awk '{if(/Des.*:$/){printf $0}else{print $0}}' printf.txt Packages: Hello-1 Owner: me me me me Other: who care? Description:Hello world! Other2: don't care 3)使用next實現 [root@creditease awk]# awk '/Desc.*:$/{printf $0;next}{print $0}' printf.txt Packages: Hello-1 Owner: me me me me Other: who care? Description:Hello world! Other2: don't care 注:可簡寫成awk '/Desc.*:$/{printf $0;next}1' printf.txt ## 1是pattern(模式),預設action(動作)是{print $0}
2.5 去重後計數按要求重定向到指定檔案
文字如下,要求計算出每項重複的個數,然後把重複次數大於2的放入gt2.txt檔案中,把重複次數小於等於2的放入le2.txt檔案中
[root@creditease files]# cat qcjs.txt aaa bbb ccc aaa ddd bbb rrr ttt ccc eee ddd rrr bbb rrr bbb [root@creditease awk]# awk '{a[$1]++}END{for(i in a){if(a[i]>2){print i,a[i]>"gt2.txt"}else{print i,a[i]>"le2.txt"}}}' qcjs.txt [root@creditease awk]# cat gt2.txt rrr 3 bbb 4 [root@creditease awk]# cat le2.txt aaa 2 ccc 2 eee 1 ttt 1 ddd 2 解析:{print },或括號中列印後可直接重定向到一個新檔案,檔名用雙引號引起來。如: {print $1 >"xin.txt"}
三、awk需注意事項
a)NR==FNR ##不能寫成NR=FNR(=在awk中是賦值的意思)
b)NR!=FNR ##NR不等於FNR
c){a=1;a[NR]} 這樣會報錯:同一條命令中變數和陣列名不能重複 d)printf 輸出的時候不換行
e){print },或括號中列印後可直接重定向到一個新檔案,檔名用雙引號引起來。如: {print $1 >"xin.txt"}
f)當模式(條件)是0的時候,後邊的動作不執行,!0的時候後邊動作才執行。
作者:秦偉
來源:宜信技術學院
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69918724/viewspace-2648109/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux 三劍客之 awk 實戰詳解教程Linux
- Linux (三劍客之三) awk命令詳解Linux
- 效能工具之linux三劍客awk、grep、sed詳解Linux
- Linux三劍客Awk、Sed、Grep 命令詳解Linux
- Linux 三劍客 Awk、Sed、Grep 命令詳解Linux
- Linux三大劍客之awkLinux
- Linux三劍客之grep詳解Linux
- 007 Linux 命令三劍客之-awkLinux
- Linux三劍客之awk入門指引Linux
- Linux系統命令三劍客之 awkLinux
- Linux 三劍客之 grep 使用詳解Linux
- Linux檔案處理三劍客之awkLinux
- 三劍客詳解之find
- Linux三劍客grep、awk和sedLinux
- 三劍客詳解
- linux三劍客(grep、sed、awk)基本使用Linux
- 【案例】Linux三劍客中awk命令如何使用?Linux
- Linux 三劍客之sedLinux
- Linux三劍客之sedLinux
- Linux常用基本命令:三劍客命令之-awk格式化動作Linux
- Linux:管道命令與文字處理三劍客(grep、sed、awk)Linux
- Linux (三劍客之一) grep字串搜尋命令詳解Linux字串
- 006 Linux 命令三劍客之-grepLinux
- Linux文字三劍客Linux
- 前端三劍客之HTML前端HTML
- 一篇文章帶你學會Linux三劍客之一:awkLinux
- Linux檔案處理三劍客之sedLinux
- Linux檔案處理三劍客之grepLinux
- 雲端計算教程學習路線影片原始碼課件:linux文字處理三劍客之AWK原始碼Linux
- Linux awk 命令詳解Linux
- linux awk 命令詳解Linux
- linux awk命令詳解Linux
- Linux文字三劍客總結Linux
- Linux中awk命令詳解Linux
- [轉]linux awk命令詳解Linux
- 使用linux三劍客取ip地址Linux
- Docker(五):Docker 三劍客之 Docker MachineDockerMac
- Docker(六):Docker 三劍客之 Docker SwarmDockerSwarm