awk的工作原理
一次讀取一行文本,按輸入分隔符進行切片,切成多個組成部分,將每片直接保存在內建的變量中,$1,$2,$3….,引用指定的變量,可以顯示指定斷,或者多個斷。如果需要顯示全部的,需要使用$0來引用??梢詫蝹€片斷進行判斷,也可以對所有斷進行循環判斷。其默認分隔符為空格
awk的基本用法格式
awk [options] ‘program’ FILE……
?語句之間用分號分隔
[options]
? -F : 指明輸入時用到的字段分隔符
? -v var=VALUE : 自定義變量
在awk中變量的引用不需要加$,而是直接引用
awk用法的簡要介紹
第一種模式
awk [options] ‘scripts’ file1,file2…..
在這種模式中,scripts主要是命令的堆砌,對輸入的文本行進行處理,通過命令print,printf或是輸出重定向的方式顯示出來,這里經常用到的知識點是:awk的內置變量,以及命令print和printf的使用
第二種模式
awk [options] ‘PATTERN{action}’ file,file2…..
在這種模式中,最重要的是5種模式和5種action的使用,以及awk的數組的使用和內置函數
第一種模式
1、print
1、各項目之間使用逗號隔開,而輸出時則以空白字符分隔
2、輸出的Item可以為字符串或數值,當前記錄的字段(如$1)、變量或awk的表達式,數值會先轉換為字符串,而后再輸出
3、print命令后面的Item可以省略,此時其功能相當于print $0,因此,如果想輸出空白行,則需要使用print””
4、如果引用變量$1或其他的,是不能使用引號引起來
2、內置變量
FS : input field seperator,輸入的分隔符,默認為空白字符
OFS: output field seperator,輸出的分隔符,默認為空白字符
RS : input record seperator,輸入的換行符
ORS: output record seperator,輸出時的換行符
NF : number of field ,字段個數 awk ‘{print NF}’ /etc/fstab :打印每行的最后一個字段為第幾個字段,這里是數量引用,不是對應的值引用
awk ‘{print $NF}’ /etc/fstab : 打印每行中的最后一個字段
NR : number of record,文件中的行數
awk ‘{print NR}’ /etc/fstab: 打印行號,其會個行號都顯示
awk ‘END{print NR}’ /etc/fstab: 顯示文本的總行數,其只是在文本處理完成后,只顯示一次行號
awk ‘{print NR}’ file1 file2 : 會每把所有文檔進行總的編號,而不是單獨對文件進行編號
FNR : 對每個文件進行行數單獨編號
awk ‘{print FNR}’ file1 file2 : 會對每個文件的行數進行單獨的編號顯示
FILENAME : awk命令所處理的文件的名稱 ?awk ‘{print FILENAME}’ file1 : 顯示當前文件名,但會每行顯示一次
awk ‘END{print FILENAME}’ file1 : 顯示當前文件名,但只會顯示一次
ARGC : 命令行中參數的個數,其awk命令也算一個參數 ?awk ‘END{print ARGC}’ /etc/fstab : 顯示共有幾個參數
ARGV : 其是一個數組,保存的是命令行所給定的各參數
awk ‘END{print ARGV[0]}’ /etc/fstab : 顯示第一個參數,默認第一個參數個awk命令本身
算術操作符
-x : 負值
+x : 轉換為數值
x^y :
x**y : 次方
x*y : 乘法
x/y : 除法
格式符
%c: 顯示字符的ASCII碼
%d,%i : 顯示十進制整數
%e,%E: 科學計數法數值顯示
%f : 顯示為浮點數
%g,%G: 以科學數法或浮點形式顯示數值
%s: 顯示字符串
%u: 無符號整數
%%: 顯示%號自身,相當于轉義
原創文章,作者:sunhao,如若轉載,請注明出處:http://www.www58058.com/80026