linux世界中最普遍使用的兩個命令行編輯器:linux
編程語言共有的特性是使用變量來存取值。gawk編程語言支持兩種不一樣類型的變量:正則表達式
gawk程序使用內建變量來引用程序數據裏的一些特殊功能。shell
1.1.1 字段和記錄分隔符變量編程
變量 | 描述 |
FIELDWIDTHS | 由空格分隔開的定義了每一個數據字段確切寬度的一列數字 |
FS | 輸入字段分隔符 |
RS | 輸入數據行分隔符/記錄分隔符 |
OFS | 輸出字段分隔符 |
ORS | 輸出數據行分隔符/記錄分隔符 |
變量OFS時用在print命令的輸出上面, 默認狀況下gawk將OFS設置成空格。經過設置OFS的值,能夠再輸出中使用任意字符串來分割字段。數組
FIELDWIDTHS變量容許不使用字段分隔符來讀取記錄,一旦設置了FIELDWIDTHS變量,gawk就會忽略FS變量,並根據提供的字段寬度來計算字段。編程語言
默認狀況下,gawk將RS、ORS設爲換行符 。 默認RS代表輸入數據流中的每行新文本就是一條新紀錄。編輯器
典型例子就是,FS變量設置成換行符,代表數據流中的每行都是一個單獨的字段,每行的全部數據都屬於同一個字段。
RS變量設置成空字符串,而後在數據記錄中留一個空白行,便是把每一個空白行當作一個記錄分隔符。函數
1.1.2 數據變量spa
變量 |
描述 |
ARGC |
出現的命令行參數的個數 |
ARGIND |
當前正在處理的文件在ARGV中的索引 |
ARGV |
命令行參數數組 |
CONVFMT |
數字的轉換格式(參見printf語句)。默認值爲%.6g |
ENVIRON |
當前shell環境變量及其值的關聯數組 |
ERRNO |
當讀取或關閉輸入文件時發生錯誤時的系統錯誤 |
FILENAME |
用於輸入到gawk程序的數據文件的文件名 |
FNR |
數據文件的當前記錄號 |
IGNORECASE |
若是設置爲非0,則忽略gawk命令中使用的字符串的大小寫 |
NF |
數據文件中數據字段的個數 |
NR |
已處理的輸入記錄的個數 |
OFMT |
顯示數字的輸出格式。默認爲%,6g |
RLENGTH |
匹配函數中匹配上的子字符串的長度 |
RSTART |
匹配函數中匹配上的子字符串的開始索引 |
以上代表,AGRC變量代表命令行上面有兩個參數,gawk和adta.txt 。ARGV數組從索引0開始,ARGV[1]就是data.txt
1.2.1 在腳本中給變量賦值
gawk程序給變量賦值跟在shell腳本中賦值相似,都用賦值語句。
gawk變量能夠保存數值或文本值,也可包含數學算式來處理數字值。
1.2.2 在命令行上給變量賦值
gawk程序能夠在命令行上給變量賦值。
存在一個問題: 若設置了變量後,這個值在打碼的BEGIN部分不可用。
解決辦法:
可使用-v命令行參數,它容許你在BEGIN代碼以前設定變量,在命令行上,-v命令行參數必須放在腳本代碼以前。
關聯數組和數字數組不一樣之處就是它的索引值可使任意文本字符串。
關聯數組用各類字符串來引用值,每一個索引字符串都必須可以惟一地表示出賦給它的數據元素。
1 var[index]= element
index 是關聯數組的索引值,element是數據元素值。
1 for (var in array) 2 { 3 statements 4 }
1 delete array[index]
刪除命令會從數組中刪除關聯索引值和相關的數據元素值。
gawk使用正則表達式時,正則表達式必須出如今它要控制的程序腳本的左側花括號前面。
以上正則表達式/11/匹配了數據字段中含有字符串11的記錄。
以上顯示腳本查看第4個數據字段含有值爲0的記錄,即顯示屬於root用戶組的系統用戶。
1 if (condition) 2 statement1
if (condition) statement1
1 if (condition) 2 statement1; 3 else 4 statement2
if (condition) statement1; else statement2
while (condition) { statements }
1 do 2 { 3 statements 4 } while (condition)
保證了語句在條件被求值以前至少執行一次。
1 for (variable assignment;condition;iteration process)
printf format, item1, item2, ...
格式化指定符采用以下格式:
1 都以%開頭,後跟一個字符
除了以上控制字母,還有3中修飾符:
1 function name([variables]) 2 { 3 statements 4 }
在定義函數時,必須出如今代碼塊以前(包括BEGIN代碼塊)。
gawk可使用將多個函數放置在一個庫文件中,經過調用庫文件使用全部的函數。
....