awk使用的一點體會
阿新 • • 發佈:2018-04-07
awk剛剛開始學習linux學到awk命令自己也上機實驗了一下在網上看到老男孩老師的一篇文章感覺非常棒(文章貼在後邊)在結合自己的體會寫出來供大家參考:
1、awk的運行原理我自己的理解:如下圖
2、重要參數和舉例說明:
例如:假設我們有個文件內容如下
1 2 3 4 5
A 11 22 ; 77
B 33 44 88 99
C 55 ; 66 100
參數1:可以打印出目前處理的行和列數(NF和NR)
[root@MY-LINEX-TEST1 ~]# awk ‘{print NF"\t"NR}‘ /data/a.txt
5 1
5 2
5 3
5 4
可以看出就是一行一行的處理的而且還打印除了列數和行號在改一下吧,看著不清楚
[root@MY-LINEX-TEST1 ~]# awk ‘{print "clum:="NF"\t""line="NR}‘ /data/a.txt
clum:=5 line=1
clum:=5 line=2
clum:=5 line=3
clum:=5 line=4
參數2:指定分隔符-F用這個參數可以指定分隔符是什麽,默認情況下是空格
[root@MY-LINEX-TEST1 ~]# awk -F";" ‘NR==2 {print $2 }‘ /data/a.txt
77
可以看出上面的語句是以";"為分割符打印出第二行的第二列
註意:(非常重要)
這個-F參數有一個特別重要的功能就是可以指定多個分隔符就用oldboy老師的那個例子來說明問題
[root@MY-LINEX-TEST1 ~]# echo ----1:2----:3|awk -F ‘[-:]+‘ ‘{print $3}‘
2
1、awk的運行原理我自己的理解:如下圖
2、重要參數和舉例說明:
例如:假設我們有個文件內容如下
1 2 3 4 5
A 11 22 ; 77
B 33 44 88 99
C 55 ; 66 100
參數1:可以打印出目前處理的行和列數(NF和NR)
5 1
5 2
5 3
5 4
可以看出就是一行一行的處理的而且還打印除了列數和行號在改一下吧,看著不清楚
[root@MY-LINEX-TEST1 ~]# awk ‘{print "clum:="NF"\t""line="NR}‘ /data/a.txt
clum:=5 line=1
clum:=5 line=2
clum:=5 line=3
clum:=5 line=4
[root@MY-LINEX-TEST1 ~]# awk -F";" ‘NR==2 {print $2 }‘ /data/a.txt
77
可以看出上面的語句是以";"為分割符打印出第二行的第二列
註意:(非常重要)
這個-F參數有一個特別重要的功能就是可以指定多個分隔符就用oldboy老師的那個例子來說明問題
[root@MY-LINEX-TEST1 ~]# echo ----1:2----:3|awk -F ‘[-:]+‘ ‘{print $3}‘
2
因為第一列是空格因此$3才會輸出2; 參數3:用printf來指定格式輸出,例如我們用用戶名文件/etc/passwd為例來說明 [root@MY-LINEX-TEST1 ~]# awk -F ‘:‘ ‘NR>8&&NR<20 {print $1"\t"$5}‘ /etc/passwd
mail mail
uucp uucp
operator operator
games games
gopher gopher
ftp FTP User
nobody Nobody
dbus System message bus
vcsa virtual console memory owner
abrt
haldaemon HAL daemon
看著不是很對齊這情況我就可以用printf來設定格式了和C語言基本一樣就是
[root@MY-LINEX-TEST1 ~]# awk -F ‘:‘ ‘NR>8&&NR<20 {printf"%10s %10s\n", $1,$5}‘ /etc/passwd
mail mail
uucp uucp
operator operator
games games
gopher gopher
ftp FTP User
nobody Nobody
dbus System message bus
vcsa virtual console memory owner
abrt
haldaemon HAL daemon
這裏不要忘記反斜杠n不然更亂。
其他的功能我就還不是很清楚以後在慢慢請了在補充進來。
oldboy文章:http://blog.51cto.com/oldboy/950730
awk使用的一點體會