python——awk命令(1)
awk是一個報告生成器,擁有強大的文字格式化的能力。可以把報告理解成“報表”或“表格”。利用awk的“文字格式化能力”將一些文字整理成我們想要的樣子。
awk基本語法:awk [options] 'Pattern{Action}' file
從字面上理解 ,action指的就是動作,awk擅長文字格式化,並且將格式化以後的文字輸出,所以awk最常用的動作就是print和printf,因為awk要把格式化完成後的文字輸出啊,所以,這兩個動作最常用。
$0 表示顯示整行 ,$NF表示當前行分割後的最後一列($0和$NF均為內建變數)
還可以新增欄位,與檔案中的列結合起來,如下圖
AWK包含倆種特殊的模式:BEGIN 和 END。
BEGIN:指定處理文字之前需執行的操作。
END:指定處理完所有行之後需要執行的操作。
輸入分隔符
輸入分隔符比較容易理解,當awk逐行處理文字的時候,以輸入分隔符為準,將文字切成多個片段,預設使用空格,但是,如果一段文字中沒有空格,我們可以指定以特定的文字或符號作為輸入分割符,比如下圖中的例子,我們指定使用"#"作為輸入分隔符。
使用 -F# 分割
除了使用-F選項指定的輸入分隔符,還可以設定內部變數的方式,指定awk輸入分隔符:-v FS='#'
輸出分隔符
awk預設的輸出分隔符是空格,但也可以通過內建變數OFS設定輸出分隔符,-v OFS="+++"
awk變數
FS:輸入欄位分隔符, 預設為空白字元
OFS:輸出欄位分隔符, 預設為空白字元
NF:number of Field,當前行的欄位的個數(即當前行被分割成了幾列),欄位數量
NR:行號,當前處理的文字行的行號。
awk處理多個檔案的時候,如果使用NR顯示行號,那麼,多個檔案的所有行會按照順序進行排序。
FNR:各檔案分別計數的行號
想要分別顯示兩個檔案的行號,該怎麼辦呢,這個時候就會用到內建變數FNR,效果如下。
RS:輸入記錄分隔符(輸入換行符), 指定輸入時的換行符
讓awk以為每次遇到一個空格就是新的一行。那麼我們該怎麼做呢?示例如下
ORS:輸出記錄分隔符(輸出換行符),輸出時用指定符號代替換行符
FILENAME:顯示當前檔名
ARGC:命令列引數的個數
ARGV:陣列,儲存的是命令列所給定的各引數
自定義變數
方法1:-v varname=value 變數名區分大小寫
方法2:在program 中直接定義,但注意,變數定義和動作之間需要 “;” 分割
還可以使用下面方式