gawk详解(一)
gawk詳解
gawk能夠用很短的程序對文檔里的資料做修改、比較、提取、打印等處理。
它不僅是一個編程語言,它還是Linux系統管理員和程序員的一個不可缺少的工具。
gawk是GNU計劃下所做的awk,gawk最初在1986年完成,之后不斷地被改進、更新。
gawk包含awk的所有功能。
1)gawk的執行方式
gawk程序很短,則可以將gawk 直接寫在命令行
例如:gawk 'pattern/action' input-file1 input-file2 ...
gawk程序較長,則應該將gawk程序存在文件中,用gawk解釋器執行
例如:gawk -f script-file input-file1 input-file2 ...
當有多個腳本文件時應當以據執行順序排列
例如:gawk -f script-file1 -f script-file2 ... input-file1 input-file2 ...
2)模式和動作
在gawk中每一個命令都由兩部分組成:模式(pattern)和相應的動作(action)。
只要模式符合,gawk就會執行相應的動作。模式部分yin應該用兩個斜杠括起來,動作部分用一對花括號括起來。
例如:
??? /pattern1/ {action1 }
??? /pattern2/ {action2 }
??? /pattern3/ {action3 }
其中模式或動作都能夠被省略,但是兩個不能同時被省略。
如果模式被省略,則對于作為輸入的文件里面的每一行,動作都會被執行。
如果動作被省略,則缺省的動作被執行,既顯示出所有符合模式的輸入行而不做任何的改動。
3)邏輯和數值運算
gawk基本邏輯運算:
== 相等
!= 不相等
> 大于
< 小于
>= 大于等于
<= 小于等于
例如:gawk '$4 > 100' testfile??? (顯示文件testfile 中那些第四個字段大于100的記錄)
gawk基本數值運算符:
+ 加法
- 減法
* 乘法
/ 除法
^ 乘方
% 求模
例如:gawk '{print $4/2}' testfile??? (顯示第4個字段被2除的結果)
在gawk中,運算符的優先級和一般的數學運算的優先級一樣。如果不確定的話可以用小括號改變優先次序。
4)內部函數
gawk中有各種的內部函數,現在介紹如下:
隨機數和數學函數
sqrt(x) 求x的平方根
sin(x) 求x的正弦函數
cos(x) 求x的余弦函數
log(x) 求x的自然對數
int(x) 求x的整數部分
rand() 求0和1之間的隨機數
srand(x) 將x設置為rand()的種子數
字符串的內部函數
index(find,in) 在字符串"find"中尋找"in"第一次出現的位置,返回值是字符串"in"出現在字符串find"里面的位置。如果沒有超找到則返回0。
length(string) 求出string的長度。
match(string,regexp) 在字符串string中尋找符合regexp的最長、最靠左邊(正則表達式默認是貪婪的)的子字符串。
??? 返回值是regexp在string的開始位置,即index值。
??? match函數將會設置系統變量RSTART等于index的值,系統變量RLENGTH等于符合的字符個數。如果不符合,則會設置RSTART為0、RLENGTH為-1。
sprintf(format,expression1,. . . )和C語言的printf類似,但是sprintf并不顯示,而是返回字符串。
sub(regexp,replacement,target) 在字符串target中尋找符合regexp的最長、最靠左的地方,以字串replacement代替最左邊的regexp。
gsub(regexp,replacement,target) 與sub類似。在字符串target中尋找符合regexp的所有地方,以字符串replacement代替所有的regexp。
substr(string,start,length) 返回字符串string 的子字符串,這個子字符串的長度為length,從第start個位置開始。
??? 如果沒有length ,則返回的子字符串是從第start 個位置開始至結束。
tolower(string) 將字符串string的大寫字母改為小寫字母。
toupper(string) 將字符串string的小寫字母改為大寫字母。
I/O的內部函數
close(filename) 將輸入或輸出的文件filename關閉。
system(command) 此函數允許用戶執行操作系統的指令,執行完畢后將回到gawk程序。
5)格式化輸出
借用C語言的格式化輸出指令,可以讓gawk的輸出形式更為多樣。這時,應該用printf而不是print。
例如:gawk '{printf "%5s likes this language/n",$2 }' testfile
p r i n t f中的%5s 部分告訴gawk 如何格式化輸出字符串,也就是輸出5個字符長。它的值由
printf 的最后部分指出,在此是第二個字段。/ n是回車換行符。
gawk語言支持的其他格式控制符號如下:
c如果是字符串,則顯示第一個字符;如果是整數,則將數字以ASCII字符的形式顯示。
d顯示十進制的整數。
i顯示十進制的整數。
e將浮點數以科學記數法的形式顯示。
f將數字以浮點的形式顯示。
g將數字以科學記數法的形式或浮點的形式顯示。數字的絕對值如果大于等于0.0001則以浮點的形式顯示,否則以科學記數法的形式顯示。
o顯示無符號的八進制整數。
s顯示一個字符串。
x顯示無符號的十六進制整數。1 0至1 5以a至f表示。
X顯示無符號的十六進制整數。1 0至1 5以A至F表示。
%它并不是真正的格式控制字符,% %將顯示%。
使用這些格式控制字符時,可以在控制字符前給出數字,以表示你將用的幾位或幾個字符。
換碼控制符
/a 警告或響鈴字符。
/b 后退一格。
/f 換頁。
/n 換行。
/r 回車。
/t Ta b。
/v 垂直的tab。
gawk能夠用很短的程序對文檔里的資料做修改、比較、提取、打印等處理。
它不僅是一個編程語言,它還是Linux系統管理員和程序員的一個不可缺少的工具。
gawk是GNU計劃下所做的awk,gawk最初在1986年完成,之后不斷地被改進、更新。
gawk包含awk的所有功能。
1)gawk的執行方式
gawk程序很短,則可以將gawk 直接寫在命令行
例如:gawk 'pattern/action' input-file1 input-file2 ...
gawk程序較長,則應該將gawk程序存在文件中,用gawk解釋器執行
例如:gawk -f script-file input-file1 input-file2 ...
當有多個腳本文件時應當以據執行順序排列
例如:gawk -f script-file1 -f script-file2 ... input-file1 input-file2 ...
2)模式和動作
在gawk中每一個命令都由兩部分組成:模式(pattern)和相應的動作(action)。
只要模式符合,gawk就會執行相應的動作。模式部分yin應該用兩個斜杠括起來,動作部分用一對花括號括起來。
例如:
??? /pattern1/ {action1 }
??? /pattern2/ {action2 }
??? /pattern3/ {action3 }
其中模式或動作都能夠被省略,但是兩個不能同時被省略。
如果模式被省略,則對于作為輸入的文件里面的每一行,動作都會被執行。
如果動作被省略,則缺省的動作被執行,既顯示出所有符合模式的輸入行而不做任何的改動。
3)邏輯和數值運算
gawk基本邏輯運算:
== 相等
!= 不相等
> 大于
< 小于
>= 大于等于
<= 小于等于
例如:gawk '$4 > 100' testfile??? (顯示文件testfile 中那些第四個字段大于100的記錄)
gawk基本數值運算符:
+ 加法
- 減法
* 乘法
/ 除法
^ 乘方
% 求模
例如:gawk '{print $4/2}' testfile??? (顯示第4個字段被2除的結果)
在gawk中,運算符的優先級和一般的數學運算的優先級一樣。如果不確定的話可以用小括號改變優先次序。
4)內部函數
gawk中有各種的內部函數,現在介紹如下:
隨機數和數學函數
sqrt(x) 求x的平方根
sin(x) 求x的正弦函數
cos(x) 求x的余弦函數
log(x) 求x的自然對數
int(x) 求x的整數部分
rand() 求0和1之間的隨機數
srand(x) 將x設置為rand()的種子數
字符串的內部函數
index(find,in) 在字符串"find"中尋找"in"第一次出現的位置,返回值是字符串"in"出現在字符串find"里面的位置。如果沒有超找到則返回0。
length(string) 求出string的長度。
match(string,regexp) 在字符串string中尋找符合regexp的最長、最靠左邊(正則表達式默認是貪婪的)的子字符串。
??? 返回值是regexp在string的開始位置,即index值。
??? match函數將會設置系統變量RSTART等于index的值,系統變量RLENGTH等于符合的字符個數。如果不符合,則會設置RSTART為0、RLENGTH為-1。
sprintf(format,expression1,. . . )和C語言的printf類似,但是sprintf并不顯示,而是返回字符串。
sub(regexp,replacement,target) 在字符串target中尋找符合regexp的最長、最靠左的地方,以字串replacement代替最左邊的regexp。
gsub(regexp,replacement,target) 與sub類似。在字符串target中尋找符合regexp的所有地方,以字符串replacement代替所有的regexp。
substr(string,start,length) 返回字符串string 的子字符串,這個子字符串的長度為length,從第start個位置開始。
??? 如果沒有length ,則返回的子字符串是從第start 個位置開始至結束。
tolower(string) 將字符串string的大寫字母改為小寫字母。
toupper(string) 將字符串string的小寫字母改為大寫字母。
I/O的內部函數
close(filename) 將輸入或輸出的文件filename關閉。
system(command) 此函數允許用戶執行操作系統的指令,執行完畢后將回到gawk程序。
5)格式化輸出
借用C語言的格式化輸出指令,可以讓gawk的輸出形式更為多樣。這時,應該用printf而不是print。
例如:gawk '{printf "%5s likes this language/n",$2 }' testfile
p r i n t f中的%5s 部分告訴gawk 如何格式化輸出字符串,也就是輸出5個字符長。它的值由
printf 的最后部分指出,在此是第二個字段。/ n是回車換行符。
gawk語言支持的其他格式控制符號如下:
c如果是字符串,則顯示第一個字符;如果是整數,則將數字以ASCII字符的形式顯示。
d顯示十進制的整數。
i顯示十進制的整數。
e將浮點數以科學記數法的形式顯示。
f將數字以浮點的形式顯示。
g將數字以科學記數法的形式或浮點的形式顯示。數字的絕對值如果大于等于0.0001則以浮點的形式顯示,否則以科學記數法的形式顯示。
o顯示無符號的八進制整數。
s顯示一個字符串。
x顯示無符號的十六進制整數。1 0至1 5以a至f表示。
X顯示無符號的十六進制整數。1 0至1 5以A至F表示。
%它并不是真正的格式控制字符,% %將顯示%。
使用這些格式控制字符時,可以在控制字符前給出數字,以表示你將用的幾位或幾個字符。
換碼控制符
/a 警告或響鈴字符。
/b 后退一格。
/f 換頁。
/n 換行。
/r 回車。
/t Ta b。
/v 垂直的tab。
總結
- 上一篇: vue中v-charts图表数据如何从后
- 下一篇: AMAZON SP API Feed