對任意一門語言都會有變數,在awk中變數分為 內置變數 和 自定義變數 。 內置變數:就是預先在awk中定義好的,用戶可以直接使用 自定義變數:這種變數為用戶自己定義的變數,需要先定義後再使用。 內置變數 awk主要的內置變數如下所示: | 變數 | 解釋 |預設值| | ...
對任意一門語言都會有變數,在awk中變數分為內置變數和自定義變數。
內置變數:就是預先在awk中定義好的,用戶可以直接使用
自定義變數:這種變數為用戶自己定義的變數,需要先定義後再使用。
內置變數
awk主要的內置變數如下所示:
變數 | 解釋 | 預設值 |
---|---|---|
\$0 | 代表當前整行記錄 | |
$\(1-\$\)n | 代表當前一行的第n列,由輸入分隔符決定 | 預設由空格進行分隔 |
FS | 輸入列分隔符 | 預設為空格 |
RS | 輸入行分隔符 | 預設為換行符 |
ORS | 輸出行分隔符 | 預設為換行符 |
OFS | 輸出列分隔符 | 預設為空格 |
NF | 當前行總列數 | |
NR | 當前處理的文本行號 | |
FNR | 各文件自己的行號 | |
FILENAME | 當前文件名 | |
ARGC | 命令行的參數個數 | |
ARGV | 命令行中數組的參數 | |
CONVFMT | 設置數字的格式 | 預設%.6g |
OFMT | 輸出數字的格式 | 預設%.6g |
用法示例
1、列印行號
2、awk預設以換行符做為新的一行的開始,如果不想採用預設的換行符,則可以自己指定行分隔符
在該示例中,使用 : 作為換行符,則每次遇到:則新起一行
3、awk在輸出顯示時也是預設以換行符作為新的一行,如果在輸出不採用預設的換行符,則也可指定輸出行分隔符
在該示例中,採用預設的換行符,與我們的預期是一致的,但如果指定輸出行換行符,則以指定的換行符做為換行的標誌,這個僅僅是awk能夠識別,因此我們看到的輸出在一行上面,而在awk裡面卻是兩行。
4、列印總列數和行號
5、如果一次輸入有多個文件,想列印各個文件自己的信息,如何處理?來看示例:
自定義變數
內置變數個數是有限的,不能滿足現實中不同的使用場景,因此在實際應用時,還需要定義自己的變數,俗稱自定義變數。在awk中自定義變數的方法主要有兩種方式:
- 方式一:通過選項-v
awk -v variableName=value
- 方式二:在模式中定義
awk 'BEGIN {variableName=value}'
用法示例
分隔符
- 問題一:awk預設是逐行處理文本,在將文本讀入後,只想輸出某些用戶想要的信息,怎麼處理?
- 問題二:在匹配到相應的數據後,要對輸出進行格式化處理,如兩個欄位問採用%%連接,怎麼處理?
針對以下兩個問題,我們引入分隔符概念。在awk中,分隔符分為兩種:輸入分隔符和輸出分隔符。
輸入分隔符
輸入分隔符,全稱field separator,簡寫FS。針對即將讀入到awk中所採用的分隔符,預設為空格;當awk逐行處理文本文件的時候,以輸入分隔符為參考對每行進行切割並分隔為多列。如果文本文件中沒有空格,則可以自行指定分隔符。
- 通過選項 -F 指定輸入分隔符
- 通過 -v 設置內部變數 FS,指定輸入分隔符
輸出分隔符
輸出分隔符,全稱output field separator,簡寫OFS。針對經過awk處理後,在輸出的時候採用的分隔符加以格式化,預設為空格。如果在輸出的結果不採用預設的分隔符,則需要指定分隔符。
- 通過 -v 設置內部變數 OFS,指定輸入分隔符
- 使用print輸出
數組
如果你瞭解過任何一門編程語言,則很容易明白什麼是數組。通過情況下,數組是代表同一種類型數據的集合,常用的有一維、二維和多維數組等等。在使用的時候通過數組下標去訪問。大部分的編程語言中下標是從0開始,而awk中數組下標是從1開始。在使用數組時需要註意的事項如下所示:
- 數組的允許賦空值
- 如果引用的數組值不存在,則系統預設會創建並賦為空值
- awk中數組的下標可以是數字,也可以是任意字元
- 判斷元素是否屬於數組需要使用(元素 in 數組)
- 如果引用的元素不存在,進行數值運算時會預設當0進行處理
用法示例
本文同步在微信訂閱號上發佈,如各位小伙伴們喜歡我的文章,也可以關註我的微信訂閱號:woaitest,或掃描下麵的二維碼添加關註: