awk
1 工作原理
逐行讀取文本,默認以空格或tab鍵為分隔符進行分隔,將分隔所得的各個字段保存到內建變量中,並按模式或者條件執行編輯命
sed命令常用於一整行的處理, 而awk比較傾向於將一行分成多個"字段"然后再進行處理。awk信息的讀入也是逐行讀取的,執行結果可以通過print的功能將字段數據打印顯示。
在使用awk命令的過程中,可以使用邏輯操作符“&&"表示“與"、"|| "表示“或"、"!"表示“非";還可以進行簡單的數學運算,如+、-、*、/、%、^分別表示加、減、乘、除、取余和乘方
2 格式
awk 選項 '模式或條件 {操作} ' 文件 1 文件 2 .......
awk -f 腳本文件 文件1 文件2
注意:awk 里
3 awk 常見的內建變量(可以直接使用)
變量 | 釋義 |
---|---|
FS | 輸入字段列分隔符。指定每行文本的字段分隔符,默認使用空格或者制表位。與 “-F” 相同 |
OFS | 輸出字段列分隔符 |
NF | 當前處理的行的字段個數 |
NR | 當前處理行的行號(序號) |
$0 | 當前處理的行的整行內容 |
$n | 當前處理行的第n個字段(第n列) |
FILENAME | 被處理的文件名 |
RS | 行分隔符。awk 從文件讀取資料是,將根據RS的定義把資料切割成許多條記錄,而awk 一次僅讀入一條記錄,以進行處理。預設值是'\n' |
4 按行輸出文本
5 BEGIN模式和END 模式
BEGIN 模式,在處理指定的文本之前,需要先執行BEGIN模式中指定的動作。awk再處理指定的文本。之后,再執行END模式中指定的動作。END{}語句塊中,往往會放入打印結果等語句。
BEGIN 和 END 中的命令只會執行一次
awk ' BEGIN{}; { } ; END{}'
6 按字段輸出文本
7 通過管道,雙引號調用 shell 命令
8 getline
當getline左右無重定向符“<”或“|”時, awk 首先讀取到了第一行,然后getlinie就得到了第一行下面的1行,也就是第二行 。 getline 之后,awk 會改變對應的NF,NR 嗎,FNR ,$0 等內部變量,所以此時,$0 的值就不再是第一行的值,而是第二行的。然后將它打印出來
當getline 左右兩邊有重定向"<" 或 "|" 時,getline 則作用於定向輸入文件,由於該文件是剛打開,並沒有被awk 讀入,只是getline 讀入,那么getline 返回的是該文件的第一行,而不是隔行.
9 awk 與數組
awk 數組的下標除了可以使用數字,也可以使用字符串。使用字符串作為數組下標,需要給字符串加上雙引號""