linux中awk工具的使用


  

  awk是一個非常好用的數據處理工具。相較於sed常常一整行處理,awk則比較傾向於一行當中分成數個“字段”處理,awk處理方式如下:

$ awk '條件類型1{動作1} 條件類型2{動作2} ...' filename

    1.查看最近5條登錄用戶和ip地址

$ last -n 5|awk '{print $1"\t"$3}'
lzyer    192.168.56.1
reboot    boot
lzyer    192.168.56.1
reboot    boot
lzyer    192.168.56.1
    
wtmp    Sat

注意:$0代表整行

變量名稱 代表意義
NF 每一行($0)擁有字段總數
NR 目前awk處理的第幾行
FS 目前分隔符,默認是空白

 

awk的邏輯運算

運算單元 代表意義
> 大於
< 小於
>= 大於等於
<= 小於等於
== 等於
!= 不等於

值得注意的是那個“ == ”的符號,因為:

  • 邏輯運算上面亦即所謂的大於、小於、等於等判斷式上面,習慣上是以“ == ”來表示;
  • 如果是直接給予一個值,例如變量設置時,就直接使用 = 而已。

舉例來說,在 /etc/passwd 當中是以冒號 ":" 來作為字段的分隔, 該文件中第一字段為帳號,第三字段則是 UID。那假設我要查閱,第三欄小於 10 以下的數據,並且僅列出帳號與第三欄, 那么可以這樣做:

$ cat /etc/passwd|awk '{FS=":"} $3<10 {print $0}'
root:x:0:0:root:/root:/bin/zsh
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

統計數據例子:

$ cat pay.txt 
Name    1st     2nd     3th
VBird   23000   24000   25000
DMTsai  21000   20000   23000
Bird2   43000   42000   41000
$ cat pay.txt|awk 'NR==1{printf "%10s %10s %10s %10s %10s\n",$1,$2,$3,$4,"Total"} \
NR>=2{total=$2+$3+$4
> printf "%10s %10d %10d %10d %10.2f\n",$1,$2,$3,$4,total}'
      Name        1st        2nd        3th      Total
     VBird      23000      24000      25000   72000.00
    DMTsai      21000      20000      23000   64000.00
     Bird2      43000      42000      41000  126000.00

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM