41.每日一個Linux命令 ----awk

描述:強大的文本分析工具,按行處理。正則表達式

用法:awk '/search pattern1/ {Actions}shell

                   /search pattern2/ {Actions}' file數組

1.search pattern正則表達式 布爾值函數

2.Actions 輸出的語法工具

3.單引號的做用防止shell截斷spa

工做方式:命令行

1) Awk 一次讀取文件中的一行code

2)對於一行,按照給定的正則表達式的順序進行匹配,若是匹配則執行對應的 Action字符串

3)若是沒有匹配上則不執行任何動做io

4)在上訴的語法中, Search Pattern 和 Action 是可選的,可是必須提供其中一個

5)若是 Search Pattern 未提供,則對全部的輸入行執行 Action 操做

6)若是 Action 未提供,則默認打印出該行的數據

7) {} 這種 Action 不作任何事情,和未提供的 Action 的工做方式不同

8) Action 中的語句應該使用分號分隔

內建變量

變量 描述
\$n 當前記錄的第n個字段,字段間由FS分隔
\$0 完整的輸入記錄
ARGC 命令行參數的數目
ARGIND 命令行中當前文件的位置(從0開始算)
ARGV 包含命令行參數的數組
CONVFMT 數字轉換格式(默認值爲%.6g)ENVIRON環境變量關聯數組
ERRNO 最後一個系統錯誤的描述
FIELDWIDTHS 字段寬度列表(用空格鍵分隔)
FILENAME 當前文件名
FNR 同NR,但相對於當前文件
FS 字段分隔符(默認是任何空格)
IGNORECASE 若是爲真,則進行忽略大小寫的匹配
NF 當前記錄中的字段數
NR 當前記錄數
OFMT 數字的輸出格式(默認值是%.6g)
OFS 輸出字段分隔符(默認值是一個空格)
ORS 輸出記錄分隔符(默認值是一個換行符)
RLENGTH 由match函數所匹配的字符串的長度
RS 記錄分隔符(默認是一個換行符)
RSTART 由match函數所匹配的字符串的第一個位置
SUBSEP 數組下標分隔符(默認值是/034)

示例:

[root@share19 ~]# cat employee.txt 
100  Thomas  Manager    Sales       $5,000    
200  Jason   Developer  Technology  $5,500    
300  Sanjay  Sysadmin   Technology  $7,000    
400  Nisha   Manager    Marketing   $9,500    
500  Randy   DBA        Technology  $6,000

awk 默認

[root@share19 ~]# awk '{print}' employee.txt 
100  Thomas  Manager    Sales       $5,000    
200  Jason   Developer  Technology  $5,500    
300  Sanjay  Sysadmin   Technology  $7,000    
400  Nisha   Manager    Marketing   $9,500    
500  Randy   DBA        Technology  $6,000

awk 打印匹配的行

[root@share19 ~]# awk '/Thomas/
> /Nisha/' employee.txt
100  Thomas  Manager    Sales       $5,000    
400  Nisha   Manager    Marketing   $9,500

打印指定域

[root@share19 ~]# awk '{print $2,$5}' employee.txt 
Thomas $5,000
Jason $5,500
Sanjay $7,000
Nisha $9,500
Randy $6,00
[root@share19 ~]# awk '{print $2,$NF}' employee.txt 
Thomas $5,000
Jason $5,500
Sanjay $7,000
Nisha $9,500
Randy $6,000

awk 開始結束動做

BEGIN { Actions}    
{ACTION} # Action for everyline in a file    
END { Actions }
[root@share19 ~]# awk 'BEGIN {print "NAME/tDesignation/tDepartment/tSalary"}
{print $2,"\t",$3,"\t",$4,"\t",$NF}
END {print "Report Generated\n--------------------"}' employee.txt 
NAME/tDesignation/tDepartment/tSalary
Thomas   Manager         Sales   $5,000
Jason    Developer       Technology      $5,500
Sanjay   Sysadmin        Technology      $7,000
Nisha    Manager         Marketing       $9,500
Randy    DBA     Technology      $6,000
Report Generated
--------------------

找出ID>200的員工

[root@share19 ~]# awk '$1>200' employee.txt 
300  Sanjay  Sysadmin   Technology  $7,000    
400  Nisha   Manager    Marketing   $9,500    
500  Randy   DBA        Technology  $6,000

打印技術部員工

[root@share19 ~]# awk '$4 ~ /Technology/' employee.txt 
200  Jason   Developer  Technology  $5,500    
300  Sanjay  Sysadmin   Technology  $7,000    
500  Randy   DBA        Technology  $6,000

打印技術部的員工數

[root@share19 ~]# awk 'BEGIN {count = 0}
> $4 ~ /Technology/ {count = count +1} 
> END {print "Number of employee in Technology Dept",count}' employee.txt
Number of employee in Technology Dept 3
相關文章
相關標籤/搜索